Django登陆以后重定向到请求登陆的页面
2015-08-26 09:20
375 查看
登陆和注销操作在网页编程上很常见,这两个操作经常需要在操作成功以后转入发出请求的页面。
比如用户正在浏览一篇文章,发现下载该文章的附件需要登录才能进行,这时候点击登陆链接转入登陆页面,输入用户名密码登陆成功以后,会自动转回原来的那篇文章所在的页面。(目前很多网站采用ajax方法弹出对话框登陆,效果更好一些)
怎么做呢?下面说的是django的实现,但是大多数的web framework都可以这么做。
注销操作:
因为不需要单独的注销页面,相对简单,利用HTTP_REFERER,Django的注销页面这样写就行:
def logout_user(request):
logout(request)
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
登录操作:
登陆操作相对复杂,因为一般都有单独的登陆页面,如果登陆成功再取HTTP_REFERER就是登陆页面自己的url,而不是之前的那个页面。
可以利用django的session,在转入登陆的时候,用的是页面的get请求,这时候在session中记录HTTP_REFERER,用户输入用户名密码进行登陆的时候(Post请求),从session中取出即可:
def login_user(request):
if request.method == 'GET':
#记住来源的url,如果没有则设置为首页('/')
request.session['login_from'] = request.META.get('HTTP_REFERER', '/')
#TODO:显示登陆页面,blablabla
elif request.method == 'POST':
#TODO: 用户登录操作,blablabla
#重定向到来源的url
return HttpResponseRedirect(request.session['login_from'])
最后的重定向,有时候需要用户感觉到被重定向回去了,就写个简单的页面告诉用户两秒以后跳转,然后改改相应的login代码就行:
<p>两秒钟后转入如下链接,如果长时间没有响应请直接点击:</p>
<p><a href="{{ refresh_url }}">{{ refresh_url }}</a></p>
<meta http-equiv="refresh" content="2;url={{ refresh_url }}">
比如用户正在浏览一篇文章,发现下载该文章的附件需要登录才能进行,这时候点击登陆链接转入登陆页面,输入用户名密码登陆成功以后,会自动转回原来的那篇文章所在的页面。(目前很多网站采用ajax方法弹出对话框登陆,效果更好一些)
怎么做呢?下面说的是django的实现,但是大多数的web framework都可以这么做。
注销操作:
因为不需要单独的注销页面,相对简单,利用HTTP_REFERER,Django的注销页面这样写就行:
def logout_user(request):
logout(request)
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
登录操作:
登陆操作相对复杂,因为一般都有单独的登陆页面,如果登陆成功再取HTTP_REFERER就是登陆页面自己的url,而不是之前的那个页面。
可以利用django的session,在转入登陆的时候,用的是页面的get请求,这时候在session中记录HTTP_REFERER,用户输入用户名密码进行登陆的时候(Post请求),从session中取出即可:
def login_user(request):
if request.method == 'GET':
#记住来源的url,如果没有则设置为首页('/')
request.session['login_from'] = request.META.get('HTTP_REFERER', '/')
#TODO:显示登陆页面,blablabla
elif request.method == 'POST':
#TODO: 用户登录操作,blablabla
#重定向到来源的url
return HttpResponseRedirect(request.session['login_from'])
最后的重定向,有时候需要用户感觉到被重定向回去了,就写个简单的页面告诉用户两秒以后跳转,然后改改相应的login代码就行:
<p>两秒钟后转入如下链接,如果长时间没有响应请直接点击:</p>
<p><a href="{{ refresh_url }}">{{ refresh_url }}</a></p>
<meta http-equiv="refresh" content="2;url={{ refresh_url }}">
相关文章推荐
- go 交换两个变量的值 忒带劲了
- go 的变量类型和字面量的对应关系
- leetcode: (119) Pascal's Triangle II
- leetcode: (118) Pascal's Triangle
- HDOJ 题目3966 Aragorn's Story(Link Cut Tree成段加减点权,查询点权)
- leetcode: (27) Remove Element
- leetcode: (26) Remove Duplicates from Sorted Array
- Lingo学习心得&2014年研究生数模竞赛E题
- Google APAC 2016 University Graduates Test Round A解题报告
- django RESTful研究一第一个测试例子(用序列化器编写原生的Django视图函数)
- leetcode: (83) Remove Duplicates from Sorted List
- django RESTful研究一第一个测试例子(ModelSerializers)
- 配置ubuntu django服务器及常用包
- django RESTful研究一第一个测试例子
- Win7下搭建Go语言开发环境
- [scrapy] scrapy 使用goose作为正文提取
- 完美解决Google最新的Design:TabLayout结合ViewPager无法显示Icon的问题
- Django自身的CBV列表
- 已解决:goldengate可以正常insert同步数据,但update不同步数据,也没有错误提示。
- HDU 4135 Co-prime (容斥)