Python Django中间件详细介绍

yizhihongxing

下面就是“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模版中加载静态文件配置方法

    当我们使用Django进行web开发时,我们常常需要加载静态文件,比如CSS样式、JavaScript脚本、图片等。在Django中,我们通常使用模版来组织和呈现我们的网页,那么如何在Django模版中加载静态文件呢? 下面是Django模版中加载静态文件配置方法的攻略: 第一步:在settings.py文件中设置静态文件路径 在django的setting…

    Django 2023年5月16日
    00
  • Django——XSS攻击及处理

    XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。 这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。 攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内…

    Django 2023年4月15日
    00
  • Django 2.1 配sql server 2008R2

     请教了不少高手和度娘终于把这个事搞定了(基本上断断续续查试了2周时间),,,,,,,, 环境:  1-Microsoft Windows     2-Microsoft SQL SERVER2008R2      3-python3.7     4-Django-2.1     5-pycharm-18-1 配置:  1.新建django项目时一定要钩选如…

    2023年4月10日
    00
  • 使用Python的Django框架结合jQuery实现AJAX购物车页面

    使用Python的Django框架结合jQuery实现AJAX购物车页面的攻略如下: 1. 创建Django项目 首先需要在本地创建一个Django项目,可以使用django-admin.py startproject命令或者使用Django官方推荐的工具django-admin startproject工具创建。 2. 编辑模型 在Django中,我们需要…

    Django 2023年5月16日
    00
  • Django用内置方法实现简单搜索功能的方法

    下面我来为你详细讲解一下“Django用内置方法实现简单搜索功能的方法”的完整攻略。 1. 创建搜索表单 首先,我们需要创建一个搜索表单,方便用户输入搜索关键字。这个表单一般包括一个输入框和一个搜索按钮。可以借助 Django 的内置 forms 模块来实现。示例代码如下: from django import forms class SearchForm(…

    Django 2023年5月16日
    00
  • 总体的Django流程/Form表单/获取前端数据/Django ORM(重要)

    登录功能(示例) 静态文件配置 form表单提交数据后端如何获取 request方法 pycharm连接数据库,Django使用mysql数据库 Django-ORM简介 表字段的增删改查 表数据的增删改查 创建APP 新创建APP时一定要先去settings.py注册 INSTALLED_APPS = [ ‘django.contrib.admin’, ‘…

    Django 2023年4月10日
    00
  • Django Rest Framework 序列化接口(PUT与Delete)设计 (前期版)!

    所有都是用 《Django Rest Framework 序列化接口(PUT与Delete)设计 (前期版)! 》中的代码,在view.py中新增 如下: #更新数据接口设计 def put(self,request,nid): #过滤出nid等于多少的对象。 book_obj = models.Book.objects.filter(pk=nid) ”’…

    Django 2023年4月12日
    00
  • Django项目部署到Heroku上

    以下有些步骤中会访问外网,可能需要FQ,需要提前设置好 1.到HeroKu官网注册一个账号,邮箱使用gmail等外国邮箱, heroku官网:https://www.heroku.com/ 2.本地需要安装git 3.下载安装HeroKu CLI(自己根据不同电脑环境下载对应版本),这个就相当于一个客户端 下载地址:https://devcenter.her…

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