当前位置: 代码迷 >> python >> django,自定义登录,登录尝试失败后下一个URL刷新
  详细解决方案

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

热度:48   发布时间:2023-06-19 09:07:34.0

我需要使用自己的登录模板和django.contrib.auth.login。 我也在尝试实现“记住我”选项,因此我遵循了以下代码段: :

所以我的观点看起来像这样:

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

当然,其中“ login”是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)

但这看起来糟透了。 有人可以给我更好的解决方案吗?

尽管这是一篇老文章,但现在我想您已经设法解决了,我想提出一个可能的解决方案。 您可以将模板更改为:

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

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