利用Django中间件middleware解决用户未登录问题(转)
2015-04-17 12:55
531 查看
add by zhj:
Django的中间件一般用于处理通用性的问题,分为五种,按处理顺序为request_middleware,view_middleware,exception_middleware,template_response_middleware,response_middleware,Django貌似为每种中间件都定义接口,比如request_middleware中间件的接口为process_request(self, request),我们增加新的中间件时,只要实现这些接口就可以了。可参见
http://djangobook.py3k.cn/2.0/chapter17/
https://docs.djangoproject.com/en/1.6/topics/http/middleware/
原文:http://www.52ij.com/jishu/1174.html
最近我们做的新项目还有一个问题没有解决,那就是用户未登录系统时,不能通过非登录的url直接进入系统,之前用java做的项目记得struts2有过滤器,还用过spring MVC的拦截器,其实这些都是filter的组件,这样很容易实现所需的功能,然而目前项目用的django框架,经研究,Django里面有没有类似filter的组件。遗憾的是,并未发现Django中有类似过滤器或者拦截器的概念。然而,Django提供了功能或许更为强大(至少是不弱于)这些概念的新东西:middleware。
经过查资料,终于实现了这个功能,我写了这样的一个middleware,它拦截所有访问非login页面的请求,检测其cookie,并判断将请求转向login页面或者其请求的页面。 具体做法如下:
(1)首先我自己先创建了一个app,命名为mymiddleware,并在里面添加了一个mymiddleware.py
(2)在settings.py中配置加载这个中间件,首先在配置文件的INSTALLED_APPS末尾加一个 'mymiddleware',在MIDDLEWARE_CLASSES的末尾加上 'mymiddleware.mymiddleware.QtsAuthenticationMiddleware',
(3)具体写mymiddleware.py,如下
这样经过测试,如果用户没有登陆过系统,输入系统中网址,会自动跳转到登录页面!!
Django的中间件一般用于处理通用性的问题,分为五种,按处理顺序为request_middleware,view_middleware,exception_middleware,template_response_middleware,response_middleware,Django貌似为每种中间件都定义接口,比如request_middleware中间件的接口为process_request(self, request),我们增加新的中间件时,只要实现这些接口就可以了。可参见
http://djangobook.py3k.cn/2.0/chapter17/
https://docs.djangoproject.com/en/1.6/topics/http/middleware/
原文:http://www.52ij.com/jishu/1174.html
最近我们做的新项目还有一个问题没有解决,那就是用户未登录系统时,不能通过非登录的url直接进入系统,之前用java做的项目记得struts2有过滤器,还用过spring MVC的拦截器,其实这些都是filter的组件,这样很容易实现所需的功能,然而目前项目用的django框架,经研究,Django里面有没有类似filter的组件。遗憾的是,并未发现Django中有类似过滤器或者拦截器的概念。然而,Django提供了功能或许更为强大(至少是不弱于)这些概念的新东西:middleware。
经过查资料,终于实现了这个功能,我写了这样的一个middleware,它拦截所有访问非login页面的请求,检测其cookie,并判断将请求转向login页面或者其请求的页面。 具体做法如下:
(1)首先我自己先创建了一个app,命名为mymiddleware,并在里面添加了一个mymiddleware.py
(2)在settings.py中配置加载这个中间件,首先在配置文件的INSTALLED_APPS末尾加一个 'mymiddleware',在MIDDLEWARE_CLASSES的末尾加上 'mymiddleware.mymiddleware.QtsAuthenticationMiddleware',
(3)具体写mymiddleware.py,如下
# -*- coding:utf-8 -*- ''' Created on 2015-04-02 @author: anonymous ''' #标准模块 from urllib import quote #第三方模块 from django.http import HttpResponseRedirect from django.contrib.auth import SESSION_KEY #自定义模块 class QtsAuthenticationMiddleware(object): def process_request(self, request): if not request.user.is_authenticated(): return HttpResponseRedirect('/user_auth/login')
这样经过测试,如果用户没有登陆过系统,输入系统中网址,会自动跳转到登录页面!!
相关文章推荐
- Django用户登录中出现403问题的解决
- 解决在root里添加用户后登录后出现密码错误的问题
- 安装Oracle后用户登录,数据导入等一系列问题解决
- 如何解决fedora 13中root用户不能登录的问题
- linux虚拟机不识别用户密码,无法登录问题解决
- 用户 'NT AUTHORITY\NETWORK SERVICE' 登录失败问题解决方案
- ASP.NET解决单用户登录问题
- 解决员工更换工号后通过SPContext.Current.Web.CurrentUser.LoginName查找当前登录用户还是原来工号的问题
- 疑难问题解决备忘录(3)——ubuntu12.04配置vsftp本地用户登录
- 解决“此版本的 SQL Server 不支持用户实例登录标志。该连接将关闭”问题
- Ubuntu开启root用户及其它登录问题的解决
- Ubuntu 16.04 用户登录界面死循环问题的解决
- 轻松解决asp.net用户ASPNET登录失败的问题
- sys用户登录报错ORA-01031 insufficient privileges问题解决方法
- JDCB学习笔记 -- day05 实现一个用户的登录功能及解决SQL注入问题
- 利用用户自己的服务器、tomcat下的解决iOS7.1企业应用无法安装应用程序 因为证书无效的问题
- 关于在django框架里取已登录用户名字的问题
- vsftpd关于500 OOPS错误及虚拟用户无法登录问题解决
- ubuntu12.10-root用户登录及解决没有声音的问题
- 利用用户自己的server、tomcat下的解决iOS7.1企业应用无法安装应用程序 由于证书无效的问题