Python Django中间件详细介绍

下面就是“Python Django中间件详细介绍”的完整攻略,包含两条示例说明:

介绍

Django中间件(Middleware)是一个可以介入Django请求/响应处理过程的实现机制。通过中间件,用户可以干预Django的request/response处理流程,修改request/response响应的方式和内容。

Django中间件可以方便的实现以下功能:

  • 对请求和响应(包括Http请求和WSGI请求)做纠正,过滤、记录,转发、限制等操作;
  • 在响应前做一些处理,如压缩、加密、设置header等;
  • 对View请求前后进行操作。

安装

Django中间件不需要特别安装,只需在项目的settings.py中进行配置即可。

在MIDDLEWARE_CLASSES中添加你的中间件即可,如:

MIDDLEWARE_CLASSES = [
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'myapp.middleware.MyMiddleware',
]

编写中间件

编写一个Django中间件需要继承中间件中提供的基类,包含以下方法:

__init__(self, get_response)

初始化方法,其中get_response参数是Django视图函数的回调函数。

__call__(self, request)

处理请求和返回响应的方法,其中request参数是Django的HttpRequest对象,返回值是HttpResponse对象。

process_request(self, request)

在路由处理之前调用。

process_view(self, request, view_func, view_args, view_kwargs)

在路由之后和View之前调用。

process_response(self, request, response)

在View之后呈现模板之前调用。

process_exception(self, request, exception)

当一个View抛出异常时调用。

示例1:

class MyMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # 修改请求
        request.url = '/'

        # 处理响应
        response = self.get_response(request)

        # 修改响应
        response['X-My-Header'] = 'hello world'

        return response

示例2:

class SimpleMiddleware(object):
    def __init__(self, get_response=None):
        self.get_response = get_response

    def __call__(self, request):
        # 处理请求
        print('Middleware Before Request')
        response = self.get_response(request)

        # 处理响应
        print('Middleware After Response')
        return response

配置

使用中间件需要在settings.py中进行配置。

语法:MIDDLEWARE_CLASSES = (中间件类路径)

示例:

MIDDLEWARE_CLASSES += ('a.middleware.SimpleMiddleware',)

可以查看数据,如下:

MIDDLEWARE_CLASSES = [
    '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',
    'a.middleware.SimpleMiddleware',
]

以上就是Python Django中间件的详细介绍,包含两条示例说明,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Django中间件详细介绍 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 详解Django Admin优化后台展示

    Django Admin是Django框架自带的一个功能强大的后台管理系统。在Django Admin中,我们可以轻松地管理网站的各种数据模型,如用户、文章、评论等等。然而,Django Admin的默认界面有时候可能无法完全满足我们的需求,因此我们需要进行一些优化来让后台展示更加完整和便捷。下面是一些常见的Django Admin优化技巧和实例代码: 添加…

    Django 2023年3月12日
    00
  • Python Django 数据库的相关操作详解

    下面是有关Python Django数据库相关操作的详细攻略。 1. Django操作数据库的基本步骤 Django中使用ORM(Object-Relational Mapping)方式来操作数据库。操作步骤如下: 1.1 创建模型类 在Django中,操作数据库的首要任务是定义模型类。通过模型类,Django就能自动生成相应的数据库表。下面是一个简单的Us…

    Django 2023年5月16日
    00
  • django前后端交互

    前后端交互的方式有两种,一种是自己写个html页面,插入数据,一种是使用django自带的后台管理,插入数据 下面介绍方式1: post.html <!DOCTYPE html> <html lang=”en”> <head> <meta charset=”UTF-8″> <title>Title&…

    Django 2023年4月13日
    00
  • 初试VS2015提供的Python Django模版

    最近想尝试一下python。发现vs2015提供了python的一些项目模版。其中有大名鼎鼎的web框架Django。   创建好项目后,直接调试运行是有错误的,提示找不到Django的模块,No module named ‘django’。 网上搜索了一下,有朋友也有这样的问题,不过跟我的情况可能不同。(因为我是干净的机器,没有任何的python环境)  …

    Django 2023年4月13日
    00
  • Django 自定义模型管理器(Manager)及方法

    转载自:https://www.cnblogs.com/sui776265233/p/11571418.html   1.自定义管理器(Manager) 在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager.每个Django模型至少有一个manager,你可以创建自定义manager…

    Django 2023年4月11日
    00
  • 详解Django模板继承方法(详细步骤)

    Django模板继承是一种将共同的结构元素封装在基础模板中并在子模板中使用的技术。 它使您能够在多个网页中共享HTML和CSS代码,并确保应用程序的所有页面都符合相同的品牌标准和布局。 下面是Django模板继承过程的完整攻略: 步骤1:创建基础模板 创建包含通用结构元素的基础模板是第一步。 这些结构元素可以是网页的标题,导航选项卡,页脚等。 以下是基础模板…

    Django 2023年3月12日
    00
  • Django笔记十五之in查询及date日期相关过滤操作

    这一篇介绍关于范围,日期的筛选 in range date year week weekday quarter hour 1、in in 对应于 MySQL 中的 in 操作,可以接受数组、元组等类型数据作为参数: Blog.objects.filter(id__in=[1,2,3]) 对应的 SQL 是: select * from blog_blog w…

    2023年4月10日
    00
  • DRF (Django REST framework) 框架介绍(3)

    1. Request REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了HttpRequest类的Request类的对象。 REST framework 提供了Parser解析器,在接收到请求后会自动根据Content-Type指明的请求数据类型(如JSO…

    Django 2023年4月10日
    00
合作推广
合作推广
分享本页
返回顶部