中间件介绍
中间件
数据库中间件(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,'测试')