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 框架自带的轻量级插件系统。
  • 相关阅读:
    解决xcode5升级后,Undefined symbols for architecture arm64:问题
    第8章 Foundation Kit介绍
    app 之间发送文件 ios
    iphone怎么检测屏幕是否被点亮 (用UIApplication的Delegate)
    CRM下载对象一直处于Wait状态的原因
    错误消息Customer classification does not exist when downloading
    How to resolve error message Distribution channel is not allowed for sales
    ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX这些东东是什么鬼
    有了Debug权限就能干坏事?小心了,你的一举一动尽在系统监控中
    SAP GUI和Windows注册表
  • 原文地址:https://www.cnblogs.com/SutCoderHang/p/9982817.html
Copyright © 2011-2022 走看看