Django中间件工作流程及写法实例代码

下面就是关于Django中间件工作流程及写法的完整攻略。

什么是Django中间件?

Django中间件是一种类似于拦截器的机制,可以在请求到达视图之前或者到达视图之后对请求或者响应做一些处理。常见的中间件处理方式有下面几种:

  1. 认证:检查请求的用户是否合法,并在需要时向其提供处理超过其权限等身份验证服务。
  2. 缓存:从缓存中返回响应以提高性能。
  3. 压缩: 将响应压缩后发送到客户端以减小传输大小和提高性能。
  4. 安全:提供威胁保护,例如防止跨站点脚本攻击或点击劫持。
  5. 日志:记录请求和响应。
  6. 调整:修改请求和响应。

Django中间件的执行过程

Django中间件的执行过程可以简单概括为以下几步:

  1. 请求到达Middelware的第一个是process_request方法。在process_request方法中你可以返回HttpResponse,如果返回HttpResponse实例,则中间件会跳过其他的中间件并立即返回HttpResponse。如果不返回HttpResponse则继续执行其他的中间件,在所有中间件完成后再返回HttpResponse。
  2. 通过Middelware中的process_view方法,找到该请求要执行的视图函数。
  3. 通过Middelware中的process_exception方法,在抛出异常的情况下执行。
  4. 通过Middelware中的process_template_response方法,在视图函数响应过后,模板响应之前执行。
  5. 最后通过Middelware中的process_response方法,在视图函数和模板响应之后执行。

Django中间件的写法实例代码

下面我们通过简单的示例来看看Django中间件的写法:

示例一:

功能:

  1. 记录用户访问记录并输出到命令行。
# middleware.py
import time
from django.utils.deprecation import MiddlewareMixin

class RecordMiddleware(MiddlewareMixin):
    def process_request(self, request):
        self.start_time = time.time()

    def process_response(self, request, response):
        end_time = time.time()
        cost_time = end_time - self.start_time
        print(f'{request.method} {request.path} {response.status_code} {cost_time}s')
        return response

示例二:

功能:

  1. 判断用户是否登录,若未登录则跳转到登录页面。
# middleware.py
from django.http import HttpResponseRedirect
from django.urls import reverse

class LoginRequiredMiddleware(object):

    def __init__(self, get_response):
        self.get_response = get_response
        self.login_url = reverse('login')

    def __call__(self, request):

        # 如果用户访问的是登录页面,直接跳过中间件检查
        if request.path == self.login_url:
            return self.get_response(request)

        # 如果用户未登录,跳转至登录页面
        if not request.user.is_authenticated:
            return HttpResponseRedirect(self.login_url)

        response = self.get_response(request)
        return response

以上就是Django中间件工作流程及写法实例代码的完整攻略,希望能够帮助到您。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django中间件工作流程及写法实例代码 - Python技术站

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

相关文章

  • Django 一对多序列化和反序列化

     首先看一下model.py这个文件 #学生的表 用多对多来关联另一个表class StudentModel(models.Model): username = models.CharField(max_length=43) password = models.CharField(max_length=43) course = models.ManyToMa…

    Django 2023年4月13日
    00
  • Django | pycharm 提示 unresolved attribute referene ‘objects’ for class ‘xxxx’

      objects高亮,提示信息为unresolved attribute referene ‘objects’ for class ‘BookInfo’     当前情况是pycharm没有识别到objects,并不会影响程序运行 只需要在BookInfo 模型类中的 字段同一级,加入如下代码,即可 objects = models.Manager()  …

    Django 2023年4月11日
    00
  • Django中ORM对数据库的增删改查操作

     前言 什么是ORM?  ORM(对象关系映射)指用面向对象的方法处理数据库中的创建表以及数据的增删改查等操作。        简而言之,就是将数据库的一张表当作一个类,数据库中的每一条记录当作一个对象。在Django中定义一个类,就是在数据库中创建一张表格。在Django中实例化一个类的对象,就是在数据库中增加了一条记录。在Django中删除一个对象,就是…

    Django 2023年4月12日
    00
  • 浅谈Django Admin的初步使用

    下面我将详细讲解“浅谈Django Admin的初步使用”的完整攻略,并在过程中提供两条示例说明。 1. 什么是Django Admin Django Admin是Django框架提供的内置管理工具,可以方便地对应用程序的数据进行管理和维护。它提供了一个轻量级的前端界面,允许管理者、开发者更加直观地查看、添加、修改、删除数据,而无需编写自定义管理界面。 2.…

    Django 2023年5月16日
    00
  • Python Django教程之模板的使用

    让我针对“Python Django教程之模板的使用”的完整攻略进行详细说明。 什么是Django模板 Django模板是Django框架中一种方便且灵活的方法,用于渲染文本模板。模板与网站开发中的视图函数和数据访问相结合,能够在服务器端生成动态网页。 Django模板引擎使用的是Django模板语言(DTL),它是一个基于HTML的模板引擎,并且添加了一些…

    Django 2023年5月16日
    00
  • Django框架(二十)– Django rest_framework-权限组件

    一、权限组件的使用 # 用户信息表 class UserInfo(models.Model): name = models.CharField(max_length=32) # 写choice user_choice=((0,’普通用户’),(1,’会员’),(2,’超级用户’)) # 指定choice,可以快速的通过数字,取出文字 user_type=mo…

    Django 2023年4月16日
    00
  • Python后台开发Django的教程详解(启动)

    一、标题 Python后台开发Django的教程详解(启动) 二、正文 简介 Django是一款基于Python的Web开发框架,被广泛应用于网站和应用的开发。本篇文章将介绍如何启动Django项目并进行基本配置。 环境准备 在开始Django项目之前,我们需要进行一些环境准备:- 确保你已经安装了Python。建议使用Python3以上的版本。- 使用pi…

    Django 2023年5月16日
    00
  • Django rest framework之序列化Is_valid

    最近业务用到django,遇到类似问题,记录下问题,方便日后查阅 转载: https://blog.csdn.net/xiaochendefendoushi/article/details/80956281 反序列化使用 验证 使用序列化器进行反序列化时,需要对数据进行验证后,才能获取验证成功的数据或保存成模型类对象。 在获取反序列化的数据前,必须调用is_…

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