跳至内容

Django中间件

Django 中间件是请求/响应处理流程中的钩子机制,可在全局范围内对输入输出进行拦截和处理。本文介绍中间件的工作原理、五个钩子方法(process_request/process_response 等)的执行顺序,以及如何自定义中间件实现权限校验、日志记录等功能。

Django中间件

什么是中间件
	中间件是一个用来处理Django的请求和响应的框架级别的钩子它是一个轻量低级别的插件系统用于在全局范围内改变Django的输入和输出每个中间件组件都负责做一些特定的功能
    中间件影响的是全局所以需要谨慎使用使用不当可能会影响性能

	MIDDLEWARE配置项是一个列表(列表是有序的)列表中是一个个字符串这些字符串其实是一个个类也就是一个个中间件

自定义中间件方法
	process_request(self,request)
    process_view(self, request, view_func, view_args, view_kwargs)
    process_template_response(self,request,response)
    process_exception(self, request, exception)
    process_response(self, request, response)
    
如何自定义中间件
	1.在项目名或者应用名下创建一个任意名称的文件夹
    2.在该文件夹内创建一个任意名称的py文件
    3.在该py文件内需要书写类(这个类必须继承MiddlewareMixin)
    	from django.utils.deprecation import MiddlewareMixin
        然后在这个类里面就可以自定义五个方法了
        (这五个方法并不是全部都需要书写用几个写几个)
    4.需要将类的路径以字符串的形式注册到配置文件中才能生效
    
    
django支持程序员自定义中间件并且暴露给程序员五个可以自定义的方法
    1process_request 
        1.请求来的时候需要经过每一个中间件里面的process_request方法结果的顺序是按照配置文件中注册的中间件从上往下的顺序依次执行
        2.如果中间件里面没有定义该方法那么直接跳过执行下一个中间件
        3.如果该方法返回了HttpResponse对象那么请求将不再继续往后执行而是直接原路返回(校验失败不允许访问...)
        process_request方法就是用来做全局相关的所有限制功能


    2process_response
        1.响应走的时候需要结果每一个中间件里面的process_response方法该方法有两个额外的参数request,response
        2.该方法必须返回一个HttpResponse对象
            1.默认返回的就是形参response
            2.你也可以自己返回自己的
        3.顺序是按照配置文件中注册了的中间件从下往上依次经过
            如果你没有定义的话 直接跳过执行下一个
        response是视图函数返回的HttpResponse对象(也就是说这是Django后台处理完之后给出一个的一个具体的视图)该方法的返回值(必须要有返回值)也必须是HttpResponse对象如果不返回response而返回其他对象则浏览器不会拿到Django后台给他的视图而是自定义的中间件返回的对象
        flask框架也有一个中间件但是它的规律
            只要返回数据了就必须经过所有中间件里面的类似于process_reponse方法


    3process_view
        路由匹配成功之后执行视图函数之前会自动执行中间件里面的该放法
        顺序是按照配置文件中注册的中间件从上往下的顺序依次执行

    4process_template_response
        返回的HttpResponse对象有render属性的时候才会触发
        顺序是按照配置文件中注册了的中间件从下往上依次经过

    5process_exception
        当视图函数中出现异常的情况下触发
        顺序是按照配置文件中注册了的中间件从下往上依次经过      
最后更新于