Django中的中间件
2018-05-23 08:45
120 查看
今天开发后台管理界面,涉及到Django的中间件。
Middlewares 是修改 Django request 或者 response 对象的钩子。使用中间件,可以干扰整个处理过程,每次请求中都会执行中间件的这个方法。
如果你要去一个公园,需要门票才可进入。而这个售票口一定在公园的外面,或者在公园唯一的对外开放的出口地点,如图:
在一个后台管理界面,在进入前需要先进行管理员或者用户的身份认证,所以在进入后台管理的每个界面,都需要中间件进行拦截。
如何创建一个中间件:
from django.shortcuts import render from django.http import HttpResponse import re class AdminLoginMiddleware: def __init__(self, get_response): self.get_response = get_response # One-time configuration and initialization. def __call__(self, request): # 检测当前的请求是否已经登录,如果已经登录,.则放行,如果未登录,则跳转到登录页 # 获取当前用户的请求路径 /admin/开头 但不是 /admin/login/ /admin/dologin/ /admin/verifycode urllist = ['/admin/login','/admin/dologin','/admin/vcode'] # 判断是否进入了后台,并且不是进入登录页面 if re.match('/admin/',request.path) and request.path not in urllist: # 检测session中是否存在 adminlogin的数据记录 if request.session.get('Vuser','') == '': # 如果在session没有记录,则证明没有登录,跳转到登录页面 return HttpResponse('<script>alert("请先登录");location.href="/admin/login";</script>') response = self.get_response(request) return response
在创建中间件之后,还需要在settings中注册自定义的中间件,才可以使用:
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', #自定义的中间件 'myadmin.AdminMiddleware.AdminLoginMiddleware' ]
阅读更多
相关文章推荐
- 7:django 中间件
- django form表单插件,中间件,缓存,信号
- Django中间件
- Django入门-6:视图-中间件、CSRF
- django 使用中间件 访问request里面的内容
- Django中间件实现拦截器
- 从django的中间件直接返回请求的方法
- Django中间件
- Django 登陆验证码和中间件的实现
- Django中间件
- 从django的中间件直接返回请求
- Django 中间件
- Django源码笔记——中间件处理过程
- Python自动化之Django中间件
- Django 中间件(middleware)
- django上课笔记6-MVC,MTV架构-中间件-初识Form组件
- Django源码分析4:staticfiles静态文件处理中间件分析
- 30.Django CSRF 中间件
- Django源码解析(四) 中间件
- Django中间件