一 原理
1. 装饰器,是利用闭包的原理去更改一个函数的功能,可以理解为让一个函数执行之前,去另外一个函数里面执行其他的语句,通常使用装饰器来管理权限,登录等。实现代码的重用性和耦合性。
2.中间件,是利用面向切片的编程思想。对django的服务器访问过程中实现干预。是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。
每个中间件组件是一个独立的Python类,可以定义下面方法中的一个或多个
_init _:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件
process_request(request):执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
process_view(request, view_func, view_args, view_kwargs):调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
process_template_response(request, response):在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象
process_response(request, response):所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象
process_exception(request,response,exception):当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象使用中间件,可以干扰整个处理过程,每次请求中都会执行中间件的这个方法
二. 区别和联系
区别:一个是Python的语法功能,一个是Django 框架自带的轻量级插件系统。
联系:中间件是利用装饰器原理实现的,具体通过两个函数嵌套、或通过改写类中的__ call __方法实现一个装饰器功能。使之过来的Request的请求,先到call方法中进行处理。配置中间件,实现过程干预。
网友评论