作用:
一个用来处理django的请求和响应的框架级别的钩子(函数),相对比较轻量级的钩子(函数),相对比较轻量级,并且在全局上改变django的输入和输出(使用需谨慎,否则影响性能)
直白的说中间件就是能帮助我们在视图函数执行之前和执行之后做一些额外操作
一般对于所有的请求做批量处理的时候用中间件,单独对某几个函数处理直接使用装饰器
应用场景:
做ip限制:限制某些ip访问网站
用户登录
日志记录
权限管理
请求验证(post)
eg:1.抽奖可以控制概率
2.广告过滤也可以
个人理解
作用:
实现在请求与响应之间进行一些请求的过滤访问
本质:
就是一个python类
应用场景:
1.做IP限制
限制某些IP访问网站
2.URL访问过滤
在访问一些需要登录才能访问的路由地址时,如果该用户没有登录,则禁止访问
3.缓存
当访问的路由地址,设置过缓存(先去查找缓存,看是否存在,存在则返回缓存的数据)
中间件的使用方法
1.在执行视图函数之前被调用,每个请求都会调用返回None或者HttpResponse对象
def process_request(self,request):
2.调用视图函数之前执行,没个请求上都会调用,返回None或者HttpResponse对象
def process_view(self,view_func,view_args):
3.在视图刚好执行完进行调用
def process_template_response(self,request,response)
4.所有响应浏览器之前 都会调用
def process_response(self,request,response):
5.当视图抛出异常的时候回调用
def process_exception(self,request,exception)
自定义
1.在当前的项目里创建一目录:middleware
2.在middleware目录下新建App目录
3.在App目录下创建py文件myMiddleware.py
setting.py
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',
'middleware.App.myMiddle.MyMiddle', # 路径加上
]
实例
myMiddleware.py
from django.urls import reverse
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse, redirect
class MyMiddle(MiddlewareMixin):
def process_request(self,request):
if request.path == '/addstu/' and not request.session.get('sessionid'):
return HttpResponse('你是不是访问了addstu路由地址 并且你是登录的状态')
#/addstu/ 必须登录才能访问
if request.META['REMOTE_ADDR'] == '10.0.111.210':
return HttpResponse('当前IP不允许访问该网站')
print(request.META['REMOTE_ADDR'])
if request.path == '/dologin/' and request.method == 'GET':
return HttpResponse('不是一个合法的请求')
def process_exception(self,request,exception):
print('有异常走我了')
#当出现异常的时候进行重定向
return redirect(reverse('App:showStu'))