拦截过滤器的使用

“”"
中间件的本质就是装饰器,只不过被中间件装饰的是Django项目中的视图函数
中间件实现了对请求和响应的拦截和过滤,可以对请求和响应做额外的处理
中间件更常用的名字叫做拦截过滤器(filter / interceptor)

"""
import logging

from django.shortcuts import render

# 通过Python标准库logging模块的getLogger获取日志记录器
logger = logging.getLogger('django.request')


def exception_handler_middleware(view_func):

    def wrapper(request, *args, **kwargs):
        # 拦截用户请求做出相应的处理
        resp = view_func(request, *args, **kwargs)
        # 拦截服务器给用户的响应做出相应的处理
        # 检测响应状态码是不是5xx ---> 服务器程序出问题
        # 2xx ---> 请求成功
        # 3xx ---> 重定向(给浏览器发送一个新的URL,让浏览器重新请求新的URL)
        # 4xx ---> 请求有问题
        #   ~ 404 ---> Not Found
        #   ~ 401 ---> Unauthorized
        #   ~ 403 ---> Forbidden
        #   ~ 405 ---> 请求方法不支持
        #   ~ 400 ---> 请求数据格式不对
        # 5xx ---> 服务器程序有问题
        if str(resp.status_code).startswith('5'):
            # 生成一条日志记录这个错误以便通过追踪日志定位错误解决问题
            # 写日志的时候需要根据日志的级别调用不同的方法
            # debug --- 调试信息
            # info --- 普通(正常)信息
            # warning --- 警告信息
            # error --- 错误信息
            # critical --- 致命错误信息
            logger.error(f'{request.method} {request.path} ---> {resp.status_code}')
            # 渲染专门定制的优雅的错误页给用户
            return render(request, 'error.html')
        return resp

    return wrapper

需要把拦截过滤器注册到setting中的MIDDLEWARE里面
因为需要触发其他拦截过滤器才能触发异常过滤 那么要写在中间键的最后面 中间键是从上往下请求 从下往上响应在这里插入图片描述

下面是配置日志处理器和日志生成器


LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    # 配置日志处理器
    'handlers': {
        'file': {
            'level': 'WARNING',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'error.log'),
        },
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    # 配置日志记录器
    'loggers': {
        'django.request': {
            'handlers': ['file', 'console'],
            'level': 'WARNING',
            'propagate': True,
        },
    },
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值