zoukankan      html  css  js  c++  java
  • 浅谈Django的中间件与Python的装饰器

    浅谈Django的中间件 与Python的装饰器

    一、原理

    1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该函数。在开发项目中,通常使用装饰器来管理权限,登录等等,配上Python的 @ 语法糖,轻松实现代码的重用性和低耦合性。

    2.而Django中的中间件是利用面向切面的编程思想,对Django服务器访问过程中间进行干预。

    • 是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出

    • 激活:添加到Django配置文件中的MIDD

    • LEWARE_CLASSES元组中
      每个中间件组件是一个独立的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对象使用中间件,可以干扰整个处理过程,每次请求中都会执行中间件的这个方法

    二、联系及区别

    • 联系:中间件是利用装饰器原理实现的,具体通过两个函数嵌套、或通过改写类中的__ call __方法实现一个装饰器功能。使之过来的Request的请求,先到call方法中进行处理。配置中间件,实现过程干预。
    • 区别:一个是Python的语法功能,一个是Django 框架自带的轻量级插件系统。
  • 相关阅读:
    VIJOS-P1340 拯救ice-cream(广搜+优先级队列)
    uva 11754 Code Feat
    uva11426 GCD Extreme(II)
    uvalive 4119 Always an Interger
    POJ 1442 Black Box 优先队列
    2014上海网络赛 HDU 5053 the Sum of Cube
    uvalive 4795 Paperweight
    uvalive 4589 Asteroids
    uvalive 4973 Ardenia
    DP——数字游戏
  • 原文地址:https://www.cnblogs.com/SutCoderHang/p/9982817.html
Copyright © 2011-2022 走看看