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 中间件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程