Django中的条件登录重定向

Django中的条件登录重定向,django,redirect,login,Django,Redirect,Login,我知道LOGIN\u REDIRECT\u URL我知道 <form action="?next={{ next|default:"/foo" }}" method="post"> 在第一次从主页登录时,用户被重定向到他们的个人页面,并设置会话变量。在对主页的后续请求中,重定向不会发生(因为检测到会话变量)。用于从任何其他页面重定向登录的代码不受影响 如果用户从任何其他页面登录, 将它们返回到原来的页面 观看 这就是Django所做的 使用Django已经提供的函数检查会话并正确重

我知道
LOGIN\u REDIRECT\u URL
我知道

<form action="?next={{ next|default:"/foo" }}" method="post">
在第一次从主页登录时,用户被重定向到他们的个人页面,并设置会话变量。在对主页的后续请求中,重定向不会发生(因为检测到会话变量)。用于从任何其他页面重定向登录的代码不受影响

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

这就是Django所做的

使用Django已经提供的函数检查会话并正确重定向到登录

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

这就是视图函数的用途


如果请求会话为空,则他们只是登录。在会话中设置标志并返回重定向到所需页面。请确保使用
reverse
功能——不要在应用程序中的任何位置对URL进行编码。永远。

警告:这太老套了

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


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

重定向到一个知道下一步要做什么的伪页面(可以访问
请求
)?Tomasz-听起来与下面Manoj的回答类似(但他以应答格式而不是作为评论发布)。谢谢,但是@login\u required意味着非授权用户看不到该视图。它不能适应这样一种情况:你希望一个页面是公开的,但如果他们想添加评论,就必须登录。至于更改视图功能,我不希望更改/fork django注册。除非你知道一种不用分叉就可以使用django注册的方法。“我不想更改/分叉django注册”?什么?您正在尝试修改Django注册应用程序的行为吗?请更新您的问题以明确说明这一点。你打算如何在不改变的情况下改变行为?这似乎有点矛盾。也许我误解了你。因为我的问题涉及django注册,而且因为你说“这就是视图函数的用途”,我想你的意思是我应该在django-registration中更改视图。现在我意识到你的意思是我可以在homepage视图中检测is_authenticated()并重定向它们(虽然这将有效地使经过身份验证的用户无法访问主页,这是我本希望避免的)。嗯,这有点太草率了,但你是对的,它会起作用。让我考虑一下。
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]))