34.Django中间件

栏目: Python · 发布时间: 6年前

内容简介:Django的中间件事面向切面编程的实现,好比spring的过滤器和拦截器,他是request和response 处理过程的钩子。默认的setting.py中已经定义的中间件有。每一项都是一个中间件,就像电梯一样,从上到下,又从下到上一次经过每一个层楼(中间件)。

Django的中间件事面向切面编程的实现,好比spring的过滤器和拦截器,他是request和response 处理过程的钩子。

默认的setting.py中已经定义的中间件有。

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

每一项都是一个中间件,就像电梯一样,从上到下,又从下到上一次经过每一个层楼(中间件)。 34.Django中间件

自定义中间件

自定义中间件只需要写一个普通的类即可。

# 可以写到任意py文件中,本例写在mysite/middlewares.py中
class MyMiddleware(object):

    def __init__(self, get_response):
        self.get_response = get_response


    def __call__(self, request):

        print('before')
        response = self.get_response(request)
        print('after')
        return response

然后setting.py中配置

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'mysite.middlewares.MyMiddleware', # 添加自定义中间件
]

views.py和urls.py省略。简单的index视图。

启动服务器,输入 http://127.0.0.1:8000 将会在控制台看到

before
after
[26/Apr/2019 07:07:36] "GET / HTTP/1.1" 200 2

表示我们的中间件已经生效。

init初始化方法只在web服务启动时调用一次,get_response参数是必需的,这个参数指的是下一个中间件或者view函数(如果是最后一个中间件)。

每个请求都会调用一次 call ,先对请求做处理,然后将请求发往下一个中间件(get_response),一层层的迭代,就像栈一样,返回时对响应做处理。

如果其中一个层的中间件决定短路并返回响应而不调用其get_response,那么该层下面的层都不会看到请求或响应,只有该中间件和之上的中间件才会看到响应。

其他可用函数: process_view(request, view_func, view_args, view_kwargs):

在调用view之前被调用。

它应该返回一个None 或一个HttpResponse对象。 如果返回None,Django 将会继续处理这个请求,执行其它的process_view() 中间件,然后调用对应的视图。 如果它返回一个HttpResponse对象,也会起到短路作用

process_exception(request, exception):

当一个view引发异常时,Django会调用process_exception()来处理。返回一个None或一个HttpResponse对象。如果返回HttpResponse对象,会将响应交给处理响应的中间件处理。由于处理响应时是从下到上的,此层以上的process_exception()是不会被调用的。

process_template_response(request, response):

response参数应该是一个由view或者中间件返回的TemplateResponse对像(或等价的对象)。

如果响应的实例有render()方法,process_template_response()会在view刚好执行完毕之后被调用。这个方法必须返回一个实现了render方法的响应对象。

中间件就这么简单,通常重写call方法就行


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入理解TensorFlow:架构设计与实现原理

深入理解TensorFlow:架构设计与实现原理

彭靖田、林健、白小龙 / 人民邮电出版社 / 2018-5-1 / 79.00元

本书以TensorFlow 1.2为基础,从基本概念、内部实现和实践等方面深入剖析了TensorFlow。书中首先介绍了TensorFlow设计目标、基本架构、环境准备和基础概念,接着重点介绍了以数据流图为核心的机器学习编程框架的设计原则与核心实现,紧接着还将TensorFlow与深度学习相结合,从理论基础和程序实现这两个方面系统介绍了CNN、GAN和RNN等经典模型,然后深入剖析了TensorF......一起来看看 《深入理解TensorFlow:架构设计与实现原理》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具