Django中Middleware中间件

本文涉及的产品
性能测试 PTS,5000VUM额度
云原生网关 MSE Higress,422元/月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 1 Middleware中间件概述 django中间middleware实质就是一个类,django会根据自己的规则在合适的时机执行中提前处理,此时中间件就上场了。

1 Middleware中间件概述

    django中间middleware实质就是一个类,django会根据自己的规则在合适的时机执行中
提前处理,此时中间件就上场了。

django在settings模块中,有一个MIDDLEWARE_CLASSES变量,其中每一个元素就是一个中间件。
在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.middleware.DataConvert''自定义中间件添加位置'
]

常见的middleware组件:
1. Sessions     
2. Authentication   
3. CSRF Protection 
4. GZipping Content

2 Middleware处理功能

在Djano中,中间件承担作用   Resquest---->Middleware ---->View----->Response
比如如果想实现接入安全验证,middleware是比较好的选择,是连接request与view的桥梁
Django中支持的中间件可以实现如下方法:

    方法名称            执行周期
    process_request     接受到request之后,但在确定View之前
    process_view        确定view之后,但真正执行view之前
    process_response    执行view之后
    process_exception   view抛出异常之后

详解: 每个请求都是先通过中间件process_request函数,这个函数返回None或者
HttpResponse对象,返回前者继续处理其他中间件,返回HttpResponse,处理终止返回网页内
.每个中间件都是按照顺序依次进入处理程序.

3 自定义中间件Middleware


    我们网站放在服务器正式运行之后,DEBUG改为False,这样更加安全,但有时候发生错误不能
显示错误详情页面,普通用户看到的是友好的报错信息,管理员看到的是错误详情,以便于修复
BUG,为达到两者效果,利用middleware就能做到.下面我们看下我们定义的Middleware:
import sys
from django.views.debug import technical_500_response
from django.conf import settings

class UserBasedExceptionMiddleware(object):
   def process_exception(self, request, exception):
       if request.user.is_superuser or request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS:
           return technical_500_response(request, *sys.exc_info())

    在给大家展示一个有用的例子,我们都知道浏览器发送数据仅支持GET和POST两种请求方式,
那我们是怎么实现PUT,DELETE,OPTIONS请求的功能的呢?  
下面我们将展示采用中间件将request中的请求信息进行转化的方法:

PUT/DELETE/OPTIONS方法的转换中间件:

import json
from django.utils.deprecation import MiddlewareMixin
from django.http.multipartparser import MultiPartParser

class MethodConvertMiddleware(MiddlewareMixin):
    #创建请求处理函数
    def process_request(self,request):
        method = request.method
        #判断请求请求头信息中content-type是否含有application/json

        if 'application/json' in request.META['CONTENT_TYPE']:
            #json格式转Python字典
            data = json.loads(request.body.decode()
        #判断请求请求头信息中content-type是否含有mutipart/form-data

        elif 'mutipart/form-data' in request.META['CONTENT_TYPE']:
            #解析器解析出data与文件
            data,files = MultiPartParser(request.META,request,request.upload_handlers).parse()
        else:
            #这里不支持application/x-www-form-urlencoded,其余返回{}
            data = {}
            files = None
        #前段讲请求方式放在HTTP_X_METHOD
        if 'HTTP_X_METHOD' in request.META:
            method = request.META['HTTP_X_METHOD'].upper()
            #例如设定method = 'PUT'
            setattr(request,'method',method)
        if files:
            #files存在 request.PUT_FILES = files  数据data也设置给PUT,这样就转换过来了
            setattr(request,'{method}_FILES'.format(method=method),files)
        setattr(request,method,data)
        #中间件进入下一个处理程序
        return None
注:1  中间件没有添加异常处理程序,可自行添加.
   2  中间件只针对两种常见数据类型格式application/json 与 application/form-data.
相关文章
|
2月前
|
中间件 Python
理解Django中间件及其应用实例
理解Django中间件及其应用实例
36 0
|
4月前
|
监控 安全 中间件
Python Django 后端架构开发: 中间件架构设计
Python Django 后端架构开发: 中间件架构设计
51 1
|
4月前
|
安全 中间件 项目管理
Django 后端架构开发:分页器到中间件开发
Django 后端架构开发:分页器到中间件开发
48 1
|
4月前
|
安全 中间件 开发者
Django中间件
【8月更文挑战第21天】
28 5
|
4月前
|
中间件 数据库连接 UED
Django中间件秘籍:如何用几行代码让你的应用变得超级强大?
【8月更文挑战第31天】中间件是Django框架的核心特性,位于视图与HTTP服务器之间,允许全局处理请求和响应,增强Web应用功能。通过实现`MiddlewareMixin`类的方法,如`process_request`和`process_response`,可以轻松实现请求预处理或响应后处理。中间件应用场景广泛,包括用户认证、CSRF防护和数据库连接管理等。创建并配置中间件需将其加入`settings.py`的`MIDDLEWARE`列表,顺序决定执行优先级。合理利用中间件能提高代码重用性和应用性能,带来更好的用户体验。
56 0
|
4月前
|
前端开发 中间件 索引
Django入门到放弃之中间件
Django入门到放弃之中间件
|
6月前
|
中间件 开发者 C++
Django中间件探索:揭秘中间件在Web应用中的守护角色与实战应用
Django中间件探索:揭秘中间件在Web应用中的守护角色与实战应用
|
7月前
|
中间件 Python
中间件应用Django Middleware(Python)
【5月更文挑战第3天】中间件应用Django Middleware(Python)
86 6
中间件应用Django Middleware(Python)
|
6月前
|
缓存 监控 中间件
探究Django中间件的神奇:功能、应用场景和核心方法
在Django中,中间件是一个强大的概念,它们提供了一种灵活的方式来处理请求和响应。本文将探讨Django中间件的基本概念、常见应用场景以及中间件类中的父类和核心方法。
|
6月前
|
中间件 开发者 Python
Django——中间件
Django——中间件