django----自定义中间件

本文详细介绍了如何在Django项目中使用自定义中间件来统计请求响应时间,包括中间件的创建、注册及各方法的功能解释,如process_request、process_view、process_response等。

1.在app中新建文件 middleware.py

import time
from django.urls import reverse
from django.utils.deprecation import MiddlewareMixin

# 定义中间件,统计响应时间
class TimeCountMiddleware(MiddlewareMixin):
    # 进入的第一个方法
    def process_request(self, request):
        self.start_time = time.time()    # 记录进入中间件时间
        return

    # 执行视图函数
    def process_view(self, request, func, *args, **kwargs):
        if request.path != reverse('index'):
            return None
        start = time.time()    # 执行视图函数前的时间
        response = func(request)
        costed = time.time() - start    # 整个视图函数的执行时间
        print('执行view方法花费时间:{:.2f}s'.format(costed))
        return response

    def process_exception(self, request, exception):
        pass

    # 模板渲染时进入的方法,可在此处对response进行操作,如设置headers
    def process_template_response(self, request, response):
        return response

    def process_response(self, request, response):
        costed = time.time() - self.start_time
        print('一次请求的响应时间:{:.2f}s'.format(costed))
        return response

2.注册中间件

MIDDLEWARE = [
    'student.middleware.TimeCountMiddleware',
    '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',
]

3.方法说明
1.process_request
请求到达中间件后的第一个方法,可以做一些校验,如用户登陆和请求头
返回值有两种:1)None:Django会继续执行其他方法;2)HttpResponse那么接下来只会执行process_response,其他方法将不会执行,并且若此中间件为第一个,那剩下的中间件也不会执行

2.process_view
中间件中第二个执行的方法,参数func为要执行的视图函数,若返回None则django会自动执行视图函数,从而得到最终的response

3.process_template_response
使用模板时会来到这个方法,可以对response做一些操作,比如设置Content-Type,修改或添加header

4.process_response
同上,只是不走模板时来这

5.process_exception
发生异常时进入次方法,如果在process_view中手动调用了func,则不会触发此方法。此方法接受到异常后可以选择处理,然后返回一个含有异常信息的HttpResponse,或者直接返回None不处理,此时django会使用自己的异常模板

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值