Return成功后到请求的页面@login_required

Return to the requested page after successfull @login_required

假设这是 @login_required(login_url='/account/required_login/') 之后的 url:

http://ngoksy.com/accounts/login_required/?next=/article/

查看login_require:

def required_login(request):
    return render(request, 'required_login.html')

我尝试添加'next',喜欢它here。但是没有用。:

def required_login(request):
    c = {'next' : request.GET.get('next', '/')}
    return render(request, 'login_required.html', c)

我有不同的登录模板和另一个由 @login_required 重定向的匿名用户模板。

required_login.html:

<h2>Login required! You must login to view the content.</h2>

    <form action="/accounts/auth/" method="post">
        {%csrf_token%}

        <label for="username">Username:</label>
        <input type="text" name="username" id="username" value="">
        <label for="password">Password:</label>
        <input type="password" name="password" id="password" value="">

        <input type="submit" value="LOGIN">
    </form>

我想在 login_required() 登录成功后传递 next 变量,然后进入文章页面。我该怎么做?

我最终得到了这个。

required_login 的观看次数:

def required_login(request):
    c = {'next' : request.GET.get('next', '/')}
    return render(request, 'required_login.html', c)

在模板中(注意 next 的隐藏输入):

<form action="/accounts/auth/" method="post">
    {%csrf_token%}

    <label for="username">Username:</label>
    <input type="text" name="username" id="username" value="">
    <label for="password">Password:</label>
    <input type="password" name="password" id="password" value="">
    <input type="hidden" name="next" value="{{ next }}"/>

    <input type="submit" value="LOGIN">
</form>

然后在 auth_view 的视图中:

def auth_view(request):
    username = request.POST.get('username','')
    password = request.POST.get('password','')
    user = auth.authenticate(username=username, password=password)

    if user is not None:
        auth.login(request, user)

        if request.POST.get('next') != '':
            return HttpResponseRedirect(request.POST.get('next'))
        else:
            return HttpResponseRedirect('/')
    else:
        return HttpResponseRedirect('/accounts/invalid_login')

我希望这对像我这样的其他菜鸟有所帮助! :)