Django 中间件
2021/4/12 10:57:59
本文主要是介绍Django 中间件,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
中间件介绍
中间件 数据库中间件(mycat,分库分表),服务器中间件(tomcat,nginx),消息队列中间件(rabbitmq) Django中间件(Middleware): 介于request与response处理之间的一道处理过程,在全局上改变django的输入与输出
Django的内置中间件
MIDDLEWARE = [ # 处理session 'django.contrib.sessions.middleware.SessionMiddleware', # 处理是否带斜杠的 'django.middleware.common.CommonMiddleware', # 跨站请求伪造的处理 'django.middleware.csrf.CsrfViewMiddleware', ] # SessionMiddleware源码 django.contrib.sessions.middleware.SessionMiddleware process_request(self, request) # 请求来了 process_response(self, request, response) # 请求走了会触发
自定义中间件
process_request(重点)
请求来了触发它,从上往下依次执行(在setting中中间件注册的位置) def process_request(self, request): 如果返回None,就继续往下走 如果返回四件套之一,直接就回去了 在这里面写请求来了的一些判断 request.META.REMOTE_ADDR #客户端地址 request.META.HTTP_USER_AGENT # 客户端类型
process_response(重点)
请求走了,会触发它,从下往上执行 def process_response(self, request, response): print('请求走了0000') return response #一定要return response
process_view(了解)
Django会在调用视图函数之前调用process_view方法。 它应该返回None或一个HttpResponse对象。 如果返回None,Django将继续处理这个请求,执行任何其他中间件的process_view方法,然后在执行相应的视图。 如果它返回一个HttpResponse对象,Django不会调用适当的视图函数。 它将执行中间件的process_response方法并将应用到该HttpResponse并返回结果 def process_view(self, request, view_func, view_args, view_kwargs): # view_func 视图函数 # view_args 位置参数 # view_kwargs 关键字参数 print('我是process view') # 如果return None,会执行执行视图函数 #手动执行了视图函数 # response=view_func(request,view_args, view_kwargs) # 返回response,视图函数就不执行了 return HttpResponse('ddddd')
process_exception(了解)
这个方法只有在视图函数中出现异常了才执行 def process_exception(self, request, exception): #记录错误日志 print(exception) print('出错了')
process_template_response(了解)
该方法对视图函数返回值有要求,必须是一个含有render方法类的对象,才会执行此方法 def process_template_response(self,request,response): print('我执行了') return response class Test: def __init__(self,status,msg): self.status=status self.msg=msg def render(self): import json dic={'status':self.status,'msg':self.msg} return HttpResponse(json.dumps(dic)) def index(response): return Test(True,'测试')
这篇关于Django 中间件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享
- 2024-12-10搭建个人博客网站之一、使用hugo创建个人博客网站