第三百一十六节,Django框架,中间件

本文详细介绍了Django框架中的中间件概念及其实现方法。中间件作为Django处理请求和响应过程中的一个重要环节,可以在请求到达视图前或响应返回后进行干预。文章通过实例展示了如何自定义中间件,并解释了各个中间件方法的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第三百一十六节,Django框架,中间件

django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。

在django项目的settings模块中,有一个 MIDDLEWARE变量,其中每一个元素就是一个中间件(也就是一个中间件模块的一个类),如下。

settings模块中

#中间件
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',
]

 

自定义中间件

 

1、定义中间件模块,在中间件模块里定义中间件类

 

process_request(self, request)有请求时执行
  request参数接收请求信息对象

 

process_view(self, request, callback, callback_args, callback_kwargs)逻辑处理之前执行

 

process_exception(self, request, exception)出错时执行
  exception参数接收错误信息

 

process_response(self, request, response)响应后执行,无论是否出错
  response参数接收html页面对象,立面包含响应码

 

#!/usr/bin/env python
#coding:utf-8
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import render

class zhongjianjian(MiddlewareMixin):

    def process_request(self, request):
        print('有请求时执行')
        # print(request.META) #请求对象内容
        #在这里可以做ip访问拦截器

    def process_view(self, request, callback, callback_args, callback_kwargs):
        print('逻辑处理之前执行')


    def process_exception(self, request, exception):
        print('出错时执行')
        # return render(request, 'app1/cuowu.html')
        print(exception)
        #做程序出错时处理


    def process_response(self, request, response):
        print('响应后执行,无论是否出错')
        return response

2、将中间件模块里的类路径注册到MIDDLEWARE列表里

#中间件
MIDDLEWARE = [
    'app1.chajian.zhong_jian_jian.zhongjianjian',
    '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',
]

 

中间件工作流程

#中间件
MIDDLEWARE = [
    'app1.chajian.zhong_jian_jian.zhongjianjian',
    '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',
]

如果出错流程

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值