16-Django-基础篇-中间件

简介: 16-Django-基础篇-中间件

前言

  • 本篇来学习下Django中的中间件

中间件概念

  • Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。
  • 我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预

中间件方法

  • Django在中间件中预置了六个方法,这六个方法会在不同的阶段自动执行,对输入或输出进行干预

初始化方法

  • 启动Django程序,初始化中间件时,自动调用一次,用于确定是否启用当前中间件
def __init__(self, get_response=None):
  pass

处理请求前的方法(重要)

  • 在处理每个请求前,自动调用,返回None或HttpResponse对象
def process_request(self, request):
  pass

处理视图前的方法(重要)

  • 在处理每个视图前,自动调用,返回None或HttpResponse对象
def process_view(self, request, view_func, view_args, view_kwargs):
  pass

处理响应后的方法(重要)

  • 在每个响应返回给客户端之前,自动调用,返回HttpResponse对象
def process_response(self, request, response):
  pass

异常处理

  • 当视图抛出异常时,自动调用,返回一个HttpResponse对象
def process_exception(self, request,exception):
  pass

使用示例

  • 定义中间件
# -*- coding: utf-8 -*-
# @Time    : 2022/9/4
# @Author  : 大海
# middleware.py
# 导入中间件的父类
from django.utils.deprecation import MiddlewareMixin
class TestMiddleware(MiddlewareMixin):
    """自定义中间件"""
    def process_request(self, request):
        """处理请求前自动调用"""
        print('每次请求前被调用')
    def process_view(self, request, view_func, view_args, view_kwargs):
        # 处理视图前自动调用
        print('处理视图前调用 被调用')
    def process_response(self, request, response):
        """在每个响应返回给客户端之前自动调用"""
        print('每次响应前被调用')
        return response
# views.py
def middleware(request):
    print('view 视图被调用')
    return HttpResponse('OK')
# ulrs.py
from book01.views import middleware
urlpatterns = [
    path('middleware/', middleware),
]
  • 注册中间件: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',
    'book01.middleware.TestMiddleware',  # 注册中间件
]

中间件调用顺序

  • 请求由上到下执行,响应由下到上执行
  • 定义两个中间件
# -*- coding: utf-8 -*-
# @Time    : 2022/9/4
# @Author  : 大海
# middleware.py
# 导入中间件的父类
from django.utils.deprecation import MiddlewareMixin
class TestMiddleware(MiddlewareMixin):
    """自定义中间件"""
    def process_request(self, request):
        """处理请求前自动调用"""
        print('每次请求前被调用 6666666666')
    def process_view(self, request, view_func, view_args, view_kwargs):
        # 处理视图前自动调用
        print('处理视图前调用 被调用')
    def process_response(self, request, response):
        """在每个响应返回给客户端之前自动调用"""
        print('每次响应前被调用 6666666666')
        return response
class TestMiddleware1(MiddlewareMixin):
    """自定义中间件"""
    def process_request(self, request):
        """处理请求前自动调用"""
        print('每次请求前被调用 88888888')
    def process_view(self, request, view_func, view_args, view_kwargs):
        # 处理视图前自动调用
        print('处理视图前调用 被调用')
    def process_response(self, request, response):
        """在每个响应返回给客户端之前自动调用"""
        print('每次响应前被调用 88888888')
        return response
  • 注册中间件
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',
    'book01.middleware.TestMiddleware',  # 注册中间件
    'book01.middleware.TestMiddleware1',  # 注册中间件
]

相关文章
|
5月前
|
中间件 程序员 开发工具
Django实践-08中间件的应用
Django实践-08中间件的应用
Django实践-08中间件的应用
|
2天前
|
中间件 Python
中间件应用Django Middleware(Python)
中间件应用Django Middleware(Python)
28 6
|
15天前
|
存储 监控 中间件
使用Django的中间件可以解决哪些问题
【4月更文挑战第25天】Django中间件用于处理用户认证、CSRF防御、点击劫持防护、请求响应修改、自定义需求、全局处理、异常处理、数据压缩、Session管理、URL重写、限流和CORS支持。它们按顺序执行,提供安全性、灵活性及定制功能,优化Web开发体验。
12 0
|
25天前
|
中间件 API 文件存储
Django的扩展包与中间件:增强应用功能的利器
【4月更文挑战第15天】本文介绍了Django的扩展包和中间件,两者用于增强Django应用功能。扩展包是可重用的应用,提供额外功能,如用户认证和API开发。选择合适的扩展包,通过安装、配置,可轻松集成到项目中。中间件则在请求和响应之间执行操作,如身份验证和权限控制。创建中间件类并添加到settings.py中,实现特定功能。扩展包和中间件常结合使用,以实现更复杂的应用需求,提高开发效率和应用性能。
|
9月前
|
前端开发 中间件 数据安全/隐私保护
【Django】创建用户,中间件,表单组件
【Django】创建用户,中间件,表单组件
48 0
|
9月前
|
XML 中间件 数据格式
Django 高级指南:深入理解和使用类视图和中间件
Django 是一款强大的 Python Web 框架,它提供了一套完整的解决方案,让我们能够用 Python 语言快速开发和部署复杂的 Web 应用。在本文中,我们将会深入研究 Django 中的两个高级特性:类视图(Class-Based Views)和中间件(Middleware)。
|
5月前
|
缓存 中间件 Python
Python Web 开发: 解释 Django 中的中间件是什么,以及如何使用?
Python Web 开发: 解释 Django 中的中间件是什么,以及如何使用?
|
6月前
|
中间件 Python
25 Django高级- 中间件
25 Django高级- 中间件
27 0
|
9月前
|
中间件 Python
|
9月前
|
中间件 Python