Django:@login_required装饰器不会重定向到“下一个”

时间:2020-09-02 12:57:17

标签: python django authentication decorator

我正在使用Django构建字典应用程序,用户可以在其中定义单词。但是,我希望用户能够登录后才能登录。

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

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

这是我在{strong> 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})

这时我的网址看起来像:

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是处理定义的应用程序的名称。

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

1 个答案:

答案 0 :(得分:-1)

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

    return HttpResponseRedirect(reverse(settings.LOGIN_REDIRECT_URL)) 

return redirect('/targeturl')