博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django之中间件
阅读量:4326 次
发布时间:2019-06-06

本文共 1917 字,大约阅读时间需要 6 分钟。

1、中间件流程

  当启动django程序并发送一个请求后,首先通过WSGI,然后走一遍settings.py中设置的MIDDLEWARE,即中间件:

2、中间件的五个方法:

  1) process_request(request):

    - request是一个HttpRequest对象

    - 在Django决定执行哪个视图之前,process_request()会在每个请求上调用。

  2)process_view(request, view_func, view_args, view_kwargs):

    - request:一个HttpRequest对象

    - view_func :Django会调用的一个Python函数

    - view_args:会被传递到视图的位置参数列表

    - view_kwargs:会被传递到视图的关键字参数字典

    - process_view()会在Django 调用视图之前被调用。它将返回None 或一个Httpresponse对象。如果返回None,Django 将会继续处理这个请求,执行其它的process_view() 中间件,然后调用对应的视图。如果返回一个Httpresponse对象,Django 就不用再去调用其它的view 或exception 中间件,或对应的视图.

  3)process_exception(request, exception):

    - request:一个HttpRequest对象

    - exception:一个被视图中的方法抛出来的 Exception对象

    - 如果当一个视图抛出异常时,Django会调用process_exception()来处理,而不会执行process_response。process_exception()应该返回一个None 或者一个Httpresponse对象。如果它返回一个Httpresponse对象,模型响应和响应中间件会被应用,响应结果会返回给浏览器。否则, 默认的异常处理机制将会被触发。

  4)process_template_response(request, response):

    - request:一个HttpRequest对象

    - response:一个TemplateResponse对象(或等价的对象),由Django视图或者中间件返回。

    - 如果响应的实例有render()方法,这时候process_template_response()在视图刚好执行完毕之后会被调用。

  5)process_response(request, response):

    - request:一个HttpRequest对象

    - response:Django视图或者中间件返回的HttpResponse或者StreamingHttpResponse对象。

    - 该方法会在所有响应返回浏览器之前被调用,这个方法必须返回Httpresponse或者StreamingHttpResponse对象。它可以改变已有的response,或者创建并返回新的HttpResponse或StreamingHttpResponse对象。

  注意:最后在响应阶段中,中间件以相反的顺序被应用,即在MIDDLEWARE中,最底下的类会最先被运行。

3、自定义中间件

  1)在项目下新建一个文件夹:Middle,在里面建立一个MyMiddle.py文件,写下:

# django1.10 以后的版本需要导入并继承该模块from django.utils.deprecation import MiddlewareMixin# 创建一个类,并定义process_request和process_response两个方法# 其它三个方法可以看情况自行定义class Row(MiddlewareMixin):    def process_request(self, request):        print('处理请求')    def process_response(self, request, response):        print('处理响应')        return response

 

  2)在settings.py中的MIDDLEWARE里加上自己写的类的路径:

转载于:https://www.cnblogs.com/value-code/p/8516930.html

你可能感兴趣的文章
OO第一次总结博客
查看>>
day7
查看>>
iphone移动端踩坑
查看>>
vs无法加载项目
查看>>
Beanutils基本用法
查看>>
玉伯的一道课后题题解(关于 IEEE 754 双精度浮点型精度损失)
查看>>
《BI那点儿事》数据流转换——百分比抽样、行抽样
查看>>
哈希(1) hash的基本知识回顾
查看>>
Leetcode 6——ZigZag Conversion
查看>>
dockerfile_nginx+PHP+mongo数据库_完美搭建
查看>>
Http协议的学习
查看>>
【转】轻松记住大端小端的含义(附对大端和小端的解释)
查看>>
设计模式那点事读书笔记(3)----建造者模式
查看>>
ActiveMQ学习笔记(1)----初识ActiveMQ
查看>>
Java与算法之(2) - 快速排序
查看>>
Windows之IOCP
查看>>
机器学习降维之主成分分析
查看>>
CTP2交易所成交回报
查看>>
WebSocket & websockets
查看>>
openssl 升级
查看>>