首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django:登录后重定向到上一页

Django:登录后重定向到上一页
EN

Stack Overflow用户
提问于 2009-04-30 13:14:15
回答 7查看 112.9K关注 0票数 186

我正在尝试建立一个简单的网站与登录功能非常类似于这里,所以。用户应该能够浏览作为匿名用户的网站,并在每个页面上将有一个登录链接。单击登录链接时,用户将被带到登录表单。成功登录后,用户应该返回到他最初单击登录链接的页面。我猜我必须以某种方式将当前页面的url传递给处理登录表单的视图,但我真的不能让它工作。

编辑:我想通了。我通过传递当前页面作为GET参数链接到登录表单,然后使用'next‘重定向到该页面。谢谢!

编辑2:我的解释似乎不是很清楚,所以这里是我的代码:假设我们在一个页面foo.html上,我们没有登录。现在我们希望有一个链接到login.html的foo.html上的链接。在那里我们可以登录,然后被重定向回foo.html。foo.html上的链接如下所示:

代码语言:javascript
复制
      <a href='/login/?next={{ request.path }}'>Login</a> 

现在,我编写了一个自定义登录视图,如下所示:

代码语言:javascript
复制
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中的重要一行:

代码语言:javascript
复制
<form method="post" action="./?next={{ redirect_to }}">

所以,是的,这就是它,希望这能让你明白。

EN

回答 7

Stack Overflow用户

发布于 2012-11-28 07:33:01

要支持带有param/value的完整urls,您需要:

代码语言:javascript
复制
?next={{ request.get_full_path|urlencode }}

而不仅仅是:

代码语言:javascript
复制
?next={{ request.path }}
票数 30
EN

Stack Overflow用户

发布于 2009-04-30 17:22:31

这可能不是一个“最佳实践”,但我以前已经成功地使用过:

代码语言:javascript
复制
return HttpResponseRedirect(request.META.get('HTTP_REFERER','/'))
票数 29
EN

Stack Overflow用户

发布于 2009-04-30 13:30:59

Django的内置身份验证以您想要的方式工作。

他们的登录页面包括一个next查询字符串,该字符串是登录后要返回的页面。

看看http://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.decorators.login_required

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/806835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档