Django框架中间件(Middleware)用法实例分析

yizhihongxing

下面是详细讲解“Django框架中间件(Middleware)用法实例分析”的完整攻略。

一、中间件概述

Django框架中间件(Middleware),指的是处于请求和响应处理之间的一层拦截层。中间件是在Django处理请求的过程中运行的,而非在应用程序中直接运行。

在Django中,中间件可以用于拦截请求或响应,处理请求或响应,以及更改请求或响应。它增加了框架的灵活性,使得我们能够对请求和响应进行更加细致的控制和定制。

二、中间件使用

中间件在settings.py文件中进行配置,将中间件类的路径添加到MIDDLEWARE列表中。

例如,要在Django应用程序中添加中间件“my_middleware.middleware.MyMiddleware”,可以在settings.py文件中添加以下代码:

MIDDLEWARE = [
    # ...
    'my_middleware.middleware.MyMiddleware',
    # ...
]

三、中间件实例说明

下面介绍两个中间件实例:

1. 统计请求时间中间件

这个中间件用于统计请求的处理时间,计算每个请求的处理时间,并将处理结果输出到控制台。

具体代码实现如下:

import time

class RequestTimeMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        start_time = time.time()  # 程序开始时间
        response = self.get_response(request)
        end_time = time.time()  # 程序结束时间

        print("Request to {} took {:.2f} seconds.".format(request.path, end_time - start_time))

        return response

可以看到,这个中间件实现了一个__call__方法,该方法接收request对象,计算请求处理的时间,并打印到控制台上。

2. JWT中间件

这个中间件用于验证用户的JWT Token,在视图函数被调用之前需要进行验证,如果Token不合法,需要返回一个401 Unauthorized响应。

JWT Token是一个基于JSON的开放标准,用于将声明性数据存储在JSON格式中。JWT的一个优点是它可以用于身份验证,因为它可以包含用户的身份信息。

具体代码实现如下:

import jwt
from django.conf import settings
from django.http import JsonResponse

class JWTMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if not request.META.get('HTTP_AUTHORIZATION'):
            # 请求头Authorization不存在
            return JsonResponse({'error': 'Authorization header not found.'}, status=401)

        # 获取Token
        token = request.META.get('HTTP_AUTHORIZATION').split(' ')[1]

        try:
            # 解码Token
            payload = jwt.decode(token, settings.JWT_SECRET_KEY, algorithms=[settings.JWT_ALGORITHM])
            # 将Token中的用户信息如user_id保存到request中
            request.user_id = payload['user_id']
        except:
            # Token解码失败,返回401 Unauthorized响应
            return JsonResponse({'error': 'Invalid Token.'}, status=401)

        response = self.get_response(request)
        return response

这个中间件实现了一个__call__方法,该方法接收request对象,检查请求头中是否存在Authorization,并从中获取Token。对Token进行解码,获取用户信息,并将用户ID信息存储在request对象中。

如果Token解码失败,则返回401 Unauthorized响应,如果Token解码成功,则调用后续的视图函数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django框架中间件(Middleware)用法实例分析 - Python技术站

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

相关文章

  • django框架学习:十九.admin后台表名称和字段显示中文

    如下图所示,生成数据库表格后,admin后台生成表名称会自动多一s,如果想让表名称,以及表格里的字段名中文显示,django里就需要添加verbose_name 和verbose_name_plural属性。        verbose_name 用法 如下图所示,如果想让表的字段名称显示为中文,需要在models.py文件添加verbose_name  …

    2023年4月10日
    00
  • 使用Django框架创建项目

    使用Django框架创建项目的完整攻略如下: 1. 安装Python和Django 首先,需要安装Python和Django,其中Python的版本应该在3.6及以上。Django的安装可以使用以下命令: pip install Django 2. 创建Django项目 Django项目可以使用以下命令进行创建: django-admin startproj…

    Django 2023年5月16日
    00
  • 启动Django项目

    Django是一个高效、灵活、模块化的Python web框架,用于快速开发Web应用程序。Django的核心包括模型、视图和模板,它们可以帮助开发人员快速构建功能强大的Web应用程序,并提供一种易于使用的API来连接不同的组件。 在这篇文章中,我们将学习如何启动Django项目。下面是详细的步骤: 首先,确保你安装了Python。 你需要安装Python才…

    Django 2023年3月12日
    00
  • Django REST framework 的快速入门教程

    CRM-API项目搭建 序列器(Serializers) 首先,我们来定义一些序列器。我们来创建一个新的模块(module)叫做 crm/rest_searializer.py ,这是我们用来描述数据是如何呈现的。 #从已存在的assets项目中导入数据models模块 from crm import models from rest_framework i…

    2023年4月10日
    00
  • ubuntu16.04在python3 下创建Django项目并运行的操作方法

    下面是“ubuntu16.04在python3 下创建Django项目并运行的操作方法”的完整攻略,包括两个示例说明: 示例一:使用Django-admin创建项目 首先,确认已安装Python3和Pip3,可以使用以下命令检查: bash python3 -V pip3 -V 安装Django,可以使用以下命令: bash pip3 install dja…

    Django 2023年5月16日
    00
  • django下创建多个app,如何设置每个app的urls

    1.创建第二个app   假设我们项目P下面已经有了一个默认的app,名字是app1。现在我想创建第二个app,名字时app2。   进入pychram下的Terminal中,运行命令: python manage.py startapp app2   此外,我在每个app下都建立一个urls.py,方便区分。   右击app名,new一个Python Fi…

    Django 2023年4月11日
    00
  • Django模板变量使用方式详解

    Django是一款功能强大的Python Web框架,它的模板变量是模板中最为重要和灵活的元素之一。 模板变量是一些用于在模板中呈现动态数据的Python表达式。在Django模板中,模板变量可以代表任何数据类型,例如数字、字符串、变量、对象、列表、元组和字典等。 Django模板变量的语法很简单,使用双花括号{{}}将变量包裹。当模板引擎运行时,它会将双花…

    Django 2023年3月12日
    00
  • Django运算表达式与Q对象/F对象

    Django运算表达式与Q对象/F对象 1 模型查询 概述: 1 查询集:表示从数据库中获取的对象的集合 2 查询集可以有多个过滤器,通过 逻辑运算符连接 3 过滤器就是一个函数,基于所给的参数限制查询的结果,类似MySQL模糊查询中where语句 4 查询集等同select语句 2 查询集 特点: 1 查询集通过调用过滤器方进行查询, 查询集经过过滤器筛选…

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