繁体   English   中英

Django:@login_required 装饰器不会重定向到“next”

[英]Django: @login_required decorator does not redirect to “next”

我正在使用 Django 构建一个字典应用程序,用户可以在其中定义单词。 但是,我希望用户在能够这样做之前先登录。

我试图在我的define视图(允许用户定义单词的视图)上使用内置的@login_required装饰器来实现这个约束。

使用@login_required ,当我没有登录并尝试定义一个单词(使用定义表单)时,我正确地被重定向到登录页面。

这是我在views.py 中的login_view视图:

def login_view(request):
    form = LoginForm(data=request.POST)
    if form.is_valid():
        username = form.cleaned_data["username"]
        password = form.cleaned_data["password"]
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return HttpResponseRedirect(reverse(settings.LOGIN_REDIRECT_URL))
    return render(request, "users/login.html", {"form": form})

此时我的 URL 看起来像:

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

到现在为止还挺好。 但是,一旦我登录,Django 就不会将我重定向回我最初尝试访问的定义表单(位于 /define)。 在这种情况下,如何告诉 Django 将我重定向到定义表单?

此外,在我的settings.py 中,我重新定义了LOGIN_URLLOGIN_REDIRECT_URLLOGOUT_REDIRECT_URL变量,如下所示:

LOGIN_URL = "users:login"
LOGIN_REDIRECT_URL = "dictionary:index"
LOGOUT_REDIRECT_URL = "dictionary:index"

其中users是处理登录的应用程序的名称, dictionary是处理定义的应用程序的名称。

问题可能出在这些变量之一吗?

您可以撤消设置中的更改并更改行

    return HttpResponseRedirect(reverse(settings.LOGIN_REDIRECT_URL)) 

return redirect('/targeturl')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM