首页 文章

Django中的条件登录重定向

提问于
浏览
0

我知道 LOGIN_REDIRECT_URL ,我知道

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

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

  • 如果用户从主页登录,请将其重定向到包含其用户名的URL(/ lists / [username]) .

  • 如果用户从任何其他页面登录,请将其返回到他们正在查看的页面 .

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

我想我可以在settings.py中执行条件,其中 LOGIN_REDIRECT_URL 被引用,但请求对象在设置中不可用(因此我可以在登录前知道django-registration 's 1345601 parameter in the template because the username isn' t中这样做) .

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

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

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

2 回答

  • 1

    如果用户从任何其他页面登录,请将其返回到他们正在查看的页面 .

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

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

    如果用户从主页登录,请将其重定向到包含其用户名的URL(/ lists / [username]) .

    这就是视图功能的用途 .

    如果请求会话为空,则它们只是登录 . 在会话中设置标志并返回重定向到所需页面 . 请务必使用 reverse 函数 - 不要在应用程序的任何位置对URL进行编码 . 永远 .

  • 0

    警告:这是hackish .

    你介意做两次重定向吗?这样,您的 LOGIN_REDIRECT_URL 可以是标识已登录用户的视图,并将请求重定向到用户的相应主页( /lists/username/

    这将花费您两个重定向而不是通常的重定向 . 首先,登录到视图,然后从视图到主页 .

相关问题