Django:自定义登录后重定向到同一页面

时间:2020-02-25 23:50:23

标签: django

我具有用于自定义登录的代码:

def login(request):
    if request.user.is_authenticated:
        return render(request, 'listings/index.html', {})

    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(request, username=username, password=password)
        if user is not None:
            if not request.POST.get('remember_me', None):
                request.session.set_expiry(0)
            auth_login(request, user)
            return redirect('dashboard')
        else:
            messages.error(request, "Les informations que vous venez d'entrer sont incorrects. Veuillez réessayer.")
            return render(request, 'dashboard/login.html', {})
    return render(request, 'dashboard/login.html', {'randomtip': random.choice(RandomTip.objects.all())})

我的所有视图都有@login_required和@user_passes_test装饰器。如您在登录功能中所见,当用户通过身份验证并登录后,他/他将被重定向到仪表板。 但是我有一个会话过期限制(用户的会话在6分钟后过期)。并且当它们在特定页面中时,它们将在Cookie到期后被重定向到登录名。这里的问题是,如果他们位于仪表板以外的页面中,则在他们登录后会被重定向到仪表板。

我希望他们再次登录后留在同一页面上。我如何知道当前访问页面的路径并将其放在这里:return redirect(current_page)

1 个答案:

答案 0 :(得分:0)

这是django在cookie过期时自动完成的,用户不会传递@login_required,否则他将被传递给具有此类html属性的登录页面

http://127.0.0.1:8000/login/?next=/the_page_he_was_in/

这里的密钥是/?next = /,它会重定向普通的登录重定向,并将用户直接发送到他所在的页面