django中间件 请求生命周期
1.中间件是干什么用的?
它是对所有请求和响应做一些统一处理,是介于request与response之间的一道处理过程,它相对比较轻量级,并且在全局上改变django的输入与输出。
中间件的应用场景
1、做IP访问频率限制
某些IP访问服务器的频率过高,进行拦截,比如限制每分钟不能超过20次。
2、URL访问过滤
如果用户访问的是login视图(放过)
如果访问其他视图,需要检测是不是有session认证,已经有了放行,没有返回login,这样就省得在多个视图函数上写装饰器了!
自定义中间流程:
1 在应用中创建一个py文件,比如 mymiddleware.py
2 py文件中写如下内容
from django.shortcuts import redirect,HttpResponse,render from django.utils.deprecation import MiddlewareMixin # django提供的中间件初始类 # 登录认证中间件 class LoginAuth(MiddlewareMixin): # 继承这个类 # 白名单 white_list = ['/login/', '/register/'] # 对请求处理用process_request, 如果请求通过了处理,就return None,如果没有通过直接return HttpResponse对象 def process_request(self,request): current_path = request.path if current_path not in self.white_list: status = request.session.get('is_login') if not status: # return HttpResponse('ok') #如果return 的是一个HttpResponse对象,那么中间件执行到这里,直接返回 return redirect('login') print('请求它来啦!!!')
3.

1.浏览器发送一个请求,wsgi封装的socket接收浏览器发来的请求,并且按照http协议的格式进行解包,解包完成之后封装成一个request对象
2.然后把request对象交给中间件处理,中间件处理完成之后再交给url控制器找到路径执行对应的视图函数进行处理
3.视图函数处理完成之后再响应,响应内容依次倒序通过每一个中间件
4.最后再交给wsgi通过http协议封装响应数据返回给浏览器
django自带的中间件
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', #封装session功能的 ,request.session['xx'] ='oo' 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]

浙公网安备 33010602011771号