Django 中的条件登录重定向

2024-03-15

我知道关于LOGIN_REDIRECT_URL我知道

<form action="?next={{ next|default:"/foo" }}" method="post">

在 django-registration 的 login.html 模板中。这就是我想要发生的事情:

  • 如果用户从主页登录, 将它们重定向到包含以下内容的 URL 他们的用户名(/lists/[用户名])。

  • 如果用户从其他任何地方登录 页面,将它们返回到它们所在的页面 正在观看。

twitter.com 处理此问题的方法是简单地让登录用户的主页消失。我会考虑这样做,而且这很容易解决,但我的主页上仍然有有用的东西,我不确定我是否希望它对经过身份验证的用户消失。我宁愿重定向他们。

我想我可以在 settings.py 中做一个条件,其中LOGIN_REDIRECT_URL被引用,但请求对象在设置中不可用(因此我无法访问 request.user.username 来构建重定向)。显然,我无法在模板中的 django-registration 的“默认”参数中执行此操作,因为登录前不知道用户名。

解决这个问题的正确/最佳方法是什么?谢谢。

Update:根据下面 S. Lott 的建议,这就是我最终使用的(在主页视图中):

if request.user.is_authenticated() and not request.session.get('homepage_redir'): 
    request.session['homepage_redir'] = True
    return HttpResponseRedirect(reverse('list_view',args=[request.user.username])) 

首次从主页登录时,用户将被重定向到其个人页面并设置会话变量。在对主页的后续请求中,不会发生重定向(因为检测到会话变量)。从任何其他页面重定向登录的代码不受影响。


如果用户从任何其他页面登录, 将它们返回到原来的页面 观看。

无论如何,这就是 Django 所做的。

使用 Django 已提供的功能检查会话并正确重定向到登录。

如果用户从主页登录, 将它们重定向到包含以下内容的 URL 他们的用户名(/lists/[用户名])。

这就是视图函数的用途。

如果请求会话为空,则他们刚刚登录。在会话中设置一个标志并返回到所需页面的重定向。请务必使用reverse函数——不要在应用程序中的任何地方对 URL 进行编码。曾经。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 中的条件登录重定向 的相关文章

随机推荐