Django:当用户返回上一页或返回登录页面时,如何重定向或断开用户的联系

时间:2019-02-27 03:16:12

标签: django django-views django-urls

我在此先感谢您为您提供的有关此问题的任何帮助。

如果用户单击按钮以返回上一页,或者当他再次返回登录页面时,我希望用户自动重定向到Django Web应用程序中的另一个页面。想断开连接,当他仍然登录并尝试访问注册页面时,我将断开连接或从我的网站重定向到另一个页面。

我已经尝试过LoginMixin和重定向,但是什么也没有。 当我已经登录并返回上一页时,我的意思是登录页面仍在登录,即使已经登录我也具有登录页面,同样,我可以返回注册页面,但我已经登录了。

我正在使用Django 2.1.7最新版本。 因此,任何帮助将不胜感激。

再次感谢您。

这是我的正确密码。也许他可以帮助其他人。

def login(request):

    if request.user.is_authenticated:
        return redirect('index')

    else:

        if request.method == 'POST':
            email = request.POST['email']
            password = request.POST['password']


def get_next_url():
                #request = self.request
                next_ = request.GET.get('next')
                next_post = request.POST.get('next')
                redirect_path = next_ or next_post or None
                if is_safe_url(redirect_path, request.get_host()):
                    return redirect_path
                return 'user-home'
            # def get_client_ip(request):
            #     x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
            #     if x_forwarded_for:
            #         ip = x_forwarded_for.split(',')[0]
            #     else:
            #         ip = request.META.get('REMOTE_ADDR')
            #     return ip



def get_ip_address_from_request(request):      
""" Makes the best attempt to get the client's real IP or return the loopback """
                PRIVATE_IPS_PREFIX = ('10.', '172.', '192.', '127.')
                ip_address = ''
                x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR', '')
                if x_forwarded_for and ',' not in x_forwarded_for:
                    if not x_forwarded_for.startswith(PRIVATE_IPS_PREFIX) and is_valid_ip(x_forwarded_for):
                        ip_address = x_forwarded_for.strip()
                else:
                    ips = [ip.strip() for ip in x_forwarded_for.split(',')]
                    for ip in ips:
                        if ip.startswith(PRIVATE_IPS_PREFIX):
                            continue
                        elif not is_valid_ip(ip):
                            continue
                        else:
                            ip_address = ip
                            break
                if not ip_address:
                    x_real_ip = request.META.get('HTTP_X_REAL_IP', '')
                    if x_real_ip:
                        if not x_real_ip.startswith(PRIVATE_IPS_PREFIX) and is_valid_ip(x_real_ip):
                            ip_address = x_real_ip.strip()
                if not ip_address:
                    remote_addr = request.META.get('REMOTE_ADDR', '')
                    if remote_addr:
                        if not remote_addr.startswith(PRIVATE_IPS_PREFIX) and is_valid_ip(remote_addr):
                            ip_address = remote_addr.strip()
                if not ip_address:
                    ip = request.META.get('REMOTE_ADDR')
                    ip_address = ip
                return ip_address

            try:
                ip = get_ip_address_from_request(request)
                user = User.objects.get(email=email)
                if user.check_password(password) and user.is_active:
                    email = user.email
                    user = auth.authenticate(email=email, password=password)
                    auth.login(request, user)
                    alert_connection = User.objects.filter(connection_info=True)

                    if alert_connection:
                        base_url = getattr(settings, 'BASE_URL', 'http://www.dram-access.com')
                        context = {
                            'base_url': base_url,
                            'ip': ip,
                            'email': request.user.email,
                            'first_name': request.user.first_name,
                            'last_name': request.user.last_name
                            }
                        txt_ = get_template("accounts/emails/send_just_logged.txt").render(context)
                        html_ = get_template("accounts/emails/send_just_logged.html").render(context)
                        subject = 'New connection on your DreamAccess account'
                        from_email = settings.DEFAULT_FROM_EMAIL
                        recipient_list = [request.user.email] 
                        send_mail(
                            subject,
                            message=txt_,
                            from_email=from_email,
                            recipient_list=recipient_list,
                            html_message = html_,
                            fail_silently=False,
                        )

                    messages.success(request, 'You are now logged in on DreamAccess')
                    next_path = get_next_url()
                    return redirect(next_path)

                elif user.check_password(password):
                    qs = User.objects.filter(email=email)
                    if qs.exists():
                        #user email registered check active
                        not_active = qs.filter(is_active=False).exists()
                        confirm_email = EmailActivation.objects.filter(email=email, activated=False, forced_expired=False)
                        #is_confirmable = confirm_email.confirmable().exists()
                        if confirm_email and not_active:
                            return redirect('account-user-inactive')
                        elif not_active:
                            return redirect("send-reactivation-message")
                else:
                    messages.error(request, "Your password is invalid")
                    return redirect('login')
            except User.DoesNotExist:
                messages.error(request, "This username and password doesn't exist on DreamAccess")
                return redirect('login')
        else:
            return render(request, 'accounts/login.html')`

我的注册页面代码:

def register(request):

if request.user.is_authenticated:
    return redirect('index')
else:
    form = RegisterForm(request.POST, request.FILES or None)
    context = {
        'form': form
        }
    if form.is_valid():
        #form.save()

        first_name = form.cleaned_data.get('first_name')
        last_name = form.cleaned_data.get('last_name')
        username = form.cleaned_data.get('username')
        email = form.cleaned_data.get('email')
        country = form.cleaned_data.get('country')
        types = form.cleaned_data.get('types')
        password = form.cleaned_data.get('password')
        password2 = form.cleaned_data.get('password2')
        phone = form.cleaned_data.get('phone')
        profile_pic = form.cleaned_data.get('profile_pic')

        new_user = User.objects.create_user(first_name, last_name, username, email, country, types, password, phone, profile_pic)

    else:
        return render(request, 'accounts/register.html', context)

1 个答案:

答案 0 :(得分:0)

请提供您的代码(如果有)。在注册页面视图上,您​​的代码应如下所示:

if request.user.is_authenticated:
    # HttpResponseRedirect('/redirectToNonRegisterPageURL/')
    ...
else:
    # Load Sign Up Form
    ...