我正在尝试建立一个简单的网站与登录功能非常类似于这里,所以。用户应该能够浏览作为匿名用户的网站,并在每个页面上将有一个登录链接。单击登录链接时,用户将被带到登录表单。成功登录后,用户应该返回到他最初单击登录链接的页面。我猜我必须以某种方式将当前页面的url传递给处理登录表单的视图,但我真的不能让它工作。
编辑:我想通了。我通过传递当前页面作为GET参数链接到登录表单,然后使用'next‘重定向到该页面。谢谢!
编辑2:我的解释似乎不是很清楚,所以这里是我的代码:假设我们在一个页面foo.html上,我们没有登录。现在我们希望有一个链接到login.html的foo.html上的链接。在那里我们可以登录,然后被重定向回foo.html。foo.html上的链接如下所示:
<a href='/login/?next={{ request.path }}'>Login</a>
现在,我编写了一个自定义登录视图,如下所示:
def login_view(request):
redirect_to = request.REQUEST.get('next', '')
if request.method=='POST':
#create login form...
if valid login credentials have been entered:
return HttpResponseRedirect(redirect_to)
#...
return render_to_response('login.html', locals())
和login.html中的重要一行:
<form method="post" action="./?next={{ redirect_to }}">
所以,是的,这就是它,希望这能让你明白。
发布于 2012-11-28 07:33:01
要支持带有param/value的完整urls,您需要:
?next={{ request.get_full_path|urlencode }}
而不仅仅是:
?next={{ request.path }}
发布于 2009-04-30 17:22:31
这可能不是一个“最佳实践”,但我以前已经成功地使用过:
return HttpResponseRedirect(request.META.get('HTTP_REFERER','/'))
发布于 2009-04-30 13:30:59
Django的内置身份验证以您想要的方式工作。
他们的登录页面包括一个next
查询字符串,该字符串是登录后要返回的页面。
看看http://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.decorators.login_required
https://stackoverflow.com/questions/806835
复制相似问题