django 中间件

在主目录下创建了一个middleware.py的文件;

不使用中间件定义的方法

get_response 会跳过默写中间件的方法

import logging

logger = logging.getLogger(__name__)


class CountRequestMiddleware():
     def __init__(self, get_response):
        self.get_response = get_response
        self.count_request = 0
        self.count_exceptions = 0

    def __call__(self,request, *args, **kwargs):
        self.count_request += 1
        logger.info(f"Handle {self.count_request} requests so far")
        return self.get_response(request)



  

使用中间件定义的方法 

中间件中可以定义5个方法,分别是:

  1. process_request(self,request) : 执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象

  2. process_view(self, request, callback, callback_args, callback_kwargs): 调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象

  3. process_template_response(self,request,response): 在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象

  4. process_exception(self, request, exception) 当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象

  5. process_response(self, request, response) 所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象

import logging
from django.utils.deprecation import MiddlewareMixin
from django.http import HttpResponse

logger = logging.getLogger(__name__)

class CountRequestMiddleware(MiddlewareMixin):

    def process_request(self, request):
        print("my process_request")
        print(f"[{request.method}] {request.path} - 进入中间件")

    def process_view(self, request, callback, callback_args, callback_kwargs):
        print("my process_view")
        return None

    def process_template_response(self, request, response):
        print("my process_template_response")
        return response

    def process_response(self, request, response):
        print("my process_response")
        print(f"[{response.status_code}] {request.path} - 离开中间件")
        return response

    def process_exception(exception):
        print("my process_template_response")
        return HttpResponse(exception)

注册中间件:

将自定义的中间件类注册到settings.py中间件中,把自定义的中间件的类添加到MIDLEWARE的列表当中

可参照 Django 中间件开发完全指南_中间件如何开发-CSDN博客

Django中中间件学习之如何使用自定义中间件-腾讯云开发者社区-腾讯云

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

larance

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值