利用Django中间件middleware解决用户未登录问题(转)
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,如下
# -*- 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中间件middleware解决用户未登录问题(转)的更多相关文章
- 用户未登录或Session超时时重定向到登录页,不那么简单
在网站开发中,我们经常有这样的场景出现: 情景1:对未登录的用户或没有权限的用户,当其想访问某个受限网页时,系统要能够自动转到登录页面. 情景2:对于用session保存用户状态的情况还有这样一种 ...
- Django中间件(Middleware)处理请求
关注公众号"轻松学编程"了解更多. 1.面向切面编程 切点(钩子) 切点允许我们动态的在原有逻辑中插入一部分代码 在不修改原有代码的情况下,动态注入一部分代码 默认情况,不中断传播 ...
- 利用django中间件CsrfViewMiddleware防止csrf攻击
一.在django后台处理 1.将django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django项 ...
- django中间件Middleware
熟悉web开发的同学对hook钩子肯定不陌生,通过钩子可以方便的实现一些触发和回调,并且做一些过滤和拦截. django中的中间件(middleware)就是类似钩子的一种存在.下面我们来介绍一下,并 ...
- Django REST Framework JWT 用户的登录注册
安装配配置 pip install djangorestframework-jwt 配置setting ########### 1.在INSTALLED_APPS中加入'rest_framework. ...
- Django中间件 (middleware)
中间件是处理django的请求和响应的框架级别的钩子,本质是一个类(直白一点中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作) 由于其影响的是全局,所以需要谨慎使用,使用不当会影响性 ...
- 利用CRM中间件Middleware从ERP下载Customer Material的常见错误
使用事务码VD51和VD52创建和修改Customer Material. 下图是我在ERP创建的Material,为其维护了一个Customer Material AOP. 当下载到CRM后,在We ...
- Django中间件拦截未登录url
1.利用装饰器在视图中拦截未登录的url @login_required(login_url='/user/login/') def homepage(request): pass 这种方法适合于程序 ...
- 利用 Django REST framework 编写 RESTful API
利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...
随机推荐
- 0050 MyBatis关联映射--一对多关系
一对多关系更加常见,比如用户和订单,一个用户可以有多个订单 DROP TABLE IF EXISTS customer; /*用户表*/ CREATE TABLE customer( `pk` INT ...
- maven学习资料
maven学习资料 maven学习教程:What.How.Whyhttp://www.flyne.org/article/167 Maven 那点事儿 https://my.oschina.net/h ...
- iOS学习笔记9 - 组件库介绍1
总算成功开发完了第一个较大的功能(即时通信).毕竟不可能什么东西都从轮子开始造,于是用到了一些组件,这里简单列举一下吧. 1. FMDB 作为一种文件型的数据存储方式,SQLite在iOS开发中自然也 ...
- angularjs 手动启动
谷歌推的javascript框架angulajs相当火热,由于新项目的缘故,最近一直看angularjs.在看的时候,一直有个疑问,angularjs 核心依赖于DI(依赖注入).常用的方法是在页面的 ...
- dd & cpio
dd: ------------------------------------------------------ - 指定大小块的拷贝一个文件 例1. 想把软盘的内容拷贝到另一个软盘 dd i ...
- C++ 类模板四(typename关键字)
- 64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多?(一)
前言: cpu的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推.32位操作系统针对的32位的CPU设计.64位操作系统针对的64位的CPU设计.操 ...
- js节流防抖应用场景,以及在vue中节流防抖的具体实现
故事背景: 项目有个需求是输入框在输入的时候进行搜索,展示下拉数据,但是没必要输入一个字都进行搜索,所以想到了在输入结束200毫秒后再进行搜索,从而引出来了 js的节流(throttle),防抖(de ...
- Java逍遥游记读书笔记<三>
异常处理 如何判断一个方法中可能抛出异常 该方法中出现throw语句 该方法调用了其他已经带throws子句的方法. 如果方法中可能抛出异常,有两种处理方法: 1.若当前方法有能力处理异常,则用Try ...
- Mysql数据库存储是乱码问题(或者在查询时无法加载数据)
在连接数据库时添加一行代码即可解决:?useUnicode=true&characterEncoding=utf8 截图如下: