django,自定义登录,登录尝试失败后下一个网址刷新

时间:2014-03-09 22:10:48

标签: python django

我需要使用自己的登录模板,使用django.contrib.auth.login。 我也在尝试实施“记住我”选项,因此我按照以下代码段进行了操作:https://djangosnippets.org/snippets/1881/

所以我的观点如下:

def login_with_remember_me(request):
    if request.method == 'POST':
        if not request.POST.get('remember_me', None):
            request.session.set_expiry(0)
    return login(request, template_name='domain/login.html')

“登录”当然是django.contrib.auth.views登录视图。

我还需要在登录后将用户重定向到他的上一页,所以在我的表单中我添加了<input type="hidden" name="next" value="{{ next }}" />

如果用户成功登录,则可以正常工作。但如果他无法登录,则刷新下一个参数。在这种情况下如何让我的重定向工作?

//编辑 好的,所以我找到了肮脏的解决方法:

def login_with_remember_me(request, *args, **kwargs):
    if request.method == 'POST':
        if not request.POST.get('remember_me', None):
            request.session.set_expiry(0)
    elif request.POST.get('next') is not None:
        kwargs['next'] = request.POST['next']
    return login(request, template_name='domain/login.html', *args, **kwargs)

但它看起来很糟糕。有人能给我一个更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

虽然这是一篇很老的帖子,但现在我假设你已经成功解决了这个问题,我想说明一个可能的解决方案。您可以将模板更改为:

<input type="hidden" name="next" value="{% if request.POST.next %}{{ request.POST.next }}{% else %}{{ request.GET.next }}{% endif %}"/>

我认为这应该可以解决“下一页”丢失的问题。