zoukankan      html  css  js  c++  java
  • [Django学习]中间件

    中间件

    • 是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出
    • 激活:添加到Django配置文件中的MIDDLEWARE_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, exception):当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象
    • 使用中间件,可以干扰整个处理过程,每次请求中都会执行中间件的这个方法
    • 示例:自定义异常处理
    • 与settings.py同级目录下创建myexception.py文件,定义类MyException,实现process_exception方法
    class MyException(MiddlewareMixin):
    def process_exception(self, request, exception):
    return HttpResponse(exception.message)
    • 将类MyException注册到settings.py中间件中
    MIDDLEWARE_CLASSES = (
        'test1.myexception.MyException',
        ...
    )
    
    • 定义视图,并发生一个异常信息,则会运行自定义的异常处理

    注:django 1.10之后产生了较大变化

    参考:https://www.cnblogs.com/zhaof/p/6281541.html

    views函数里面想用print在控制台下打印中文信息,乱码问题:

    因为Django默认是utf-8,系统不定。

    type = sys.getfilesystemencoding()
    print("中间件1请求".decode('utf-8').encode(type))
  • 相关阅读:
    [编程题] 微信红包
    MYSQL实现主从复制
    有关windows系统的EXE和DLL文件说法错误
    Http错误代码
    一步步优化JVM四:决定Java堆的大小以及内存占用
    一步步优化JVM三:GC优化基础
    一步步优化JVM二:JVM部署模型和JVM Runtime
    一步步优化JVM一:概述、方法及需求
    排查Java线上服务故障的方法和实例分析
    【转】Zookeeper-Watcher机制与异步调用原理
  • 原文地址:https://www.cnblogs.com/DarrenChan/p/7903825.html
Copyright © 2011-2022 走看看