标签:process middleware 中间件 django HttpResponse Django response
1. 什么是中间件
中间件位于web服务端与url路由层之间
2. django中间件用来干什么?
网站全局的身份校验, 访问频率限制(应对爬虫),权限检验...只要是涉及到全局的校验都可以在中间件完成
3. 中间件请求响应过程
1.请求的时候需要先经过中间件才能到达后端(wsgiref和urls中间)
2.响应走的时候也需要经过中间件才能到达web服务网关接口(wsgiref)
4. django中都有哪些中间件, 都是用来干什么的, 所在位置
1. django中有七个中间件
2. 个中间件的作用
# django中间件 MIDDLEWARE = [ # 安全中间件, 有任何请求没有被Django处理(比如静态媒体或用户上传的文件),它们会拥有和向Django 应用的请求相同的保护 'django.middleware.security.SecurityMiddleware', # 会话中间件, 开启会话支持 'django.contrib.sessions.middleware.SessionMiddleware', # “通用”的中间件, 后缀加"/" 'django.middleware.common.CommonMiddleware', # 添加跨站点请求伪造的保护,通过向POST表单添加一个隐藏的表单字段,并检查请求中是否有正确的值 'django.middleware.csrf.CsrfViewMiddleware', # 认证中间件, 向每个接收到的HttpRequest对象添加user属性,表示当前登录的用户 'django.contrib.auth.middleware.AuthenticationMiddleware', # 消息中间件, 开启基于Cookie和会话的消息支持 'django.contrib.messages.middleware.MessageMiddleware', # 通过X-Frame-Options协议头进行简单的点击劫持保护 'django.middleware.clickjacking.XFrameOptionsMiddleware', # 'mymiddleware.middleware.MyMiddle1', # 'mymiddleware.middleware.MyMiddle2', # 'mymiddleware.middleware.MyMiddle3', ]
3. 在settings中的MIDDLEWARE = [...]中
5.django中间件有五个可以自定义的方法
1.process_request()
1.请求来的时候会经过每个中间件的process_request()方法(自上而下)
2.如果方法里面直接还回HttpResponse对象,就会直接返回(走process_response()方法返回的),不在往下执行
基于该特点就可以做访问频率限制,身份校验, 权限校验
2.process_response()
1.必须将response返回,因为response是返回前端的数据
2.响应走的时候回依次经过每个中间件里面的process_response()方法(自下而上)
3.process_view()
在路由匹配成功之后要执行视图函数之前,执行process_view()方法
4.process_exception()
视图函数报错的时候,才执行
5.process_template_response()
返回HttpResponse对象中必须包含render属性才触发
def index(request):
print('我是index视图函数')
def render():
return HttpResponse('什么鬼玩意')
obj = HttpResponse('index')
obj.render = render
return obj
6.自定义中间件:
0.在项目中创建一个中间件的文件夹(比如:my_middleware)
1.在文件夹中创建一个.py文件(比如: middleware)
2.导入模块
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse
3.自定义的类要继承MiddlewareMixin
4.在settings的MIDDLEWARE中注册自定义的中间件, 路径不要书写错误
5.启动项目文件即可
标签:process,middleware,中间件,django,HttpResponse,Django,response 来源: https://www.cnblogs.com/zhuangshenhao/p/12160185.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。