成功@login_required后返回请求的页面

时间:2015-01-08 20:52:59

标签: django django-views django-urls

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

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>

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

2 个答案:

答案 0 :(得分:1)

我最终得到了这个。

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')

我希望这能帮助像我这样的任何其他菜鸟! :)

答案 1 :(得分:0)