ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Django中间件及自定义中间件

2019-10-30 18:58:02  阅读:214  来源: 互联网

标签:自定义 process middleware 中间件 django Django response


目录

Django中间件

中间件介绍:中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件都负责做一些特定的功能。

说的直白点中间件就是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,它本质上是一个自定义类,类中定义了几个方法,Django框架会在请求的特定的时间去执行这些方法。

Django中有7个默认的中间件:

# settings.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',
]

在Django的生命周期中,浏览器输入网址经过web服务网关接口(wsgiref)然后还要经过Django中间件才会到Django的路由层(请求来的时候,Django中间件是自上而下顺序执行,一旦某个中间件拦截了请求,后面的将不再执行。响应走的时候,Django中间件是自下而上逆序执行。)

自定义中间件:

在项目目录下创建一个middleware包,然后在包中新建一个my_middleware.py文件如下:

# my_middleware.py
from django.utils.deprecation import MiddlewareMixin

# 自定义类并继承MiddlewareMixin
class Mi(middlewareMixin):
    def process_request(self, request):
        print('我来自Mi哈哈哈')

然后去settings.py中注册自定义的中间件

# settings.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',
    
    # 自定义的中间件
    'middleware.my_middleware.Mi',
]

五个可修改的内置方法:

# 两个重点

# process_request()
"""
请求来的时候会从上往下依次经过每一个中间里面process_request,
一旦里面返回了HttpResponse对象那么就不再往后执行了,
会执行同一级别的process_response
"""
def process_request(self, request):
    print('我是process_request')
    
# process_response()
"""
响应走的时候,会从下往上一次经过每一个中间件里面的porcess_response
"""
def process_response(self, request, response):
    # response就是要返回给用户的数据
    print('我是process_response')
    return response


# 三个了解
# procesee_view(): 路由匹配成功之后执行视图函数之前触发
# process_exception: 当视图函数出现异常的时候自动触发
# process_template_response: 当视图函数执行完毕之后并且返回的对象中含有render方法的情况下才会触发

标签:自定义,process,middleware,中间件,django,Django,response
来源: https://www.cnblogs.com/17vv/p/11766870.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有