zoukankan      html  css  js  c++  java
  • drf自定义公共组件

    一、response.py

    from rest_framework.response import Response
    
    
    class CommonResponse(Response):
        def __init__(self, state=1, tip='响应成功', data=None,
                     status=None, template_name=None, headers=None,
                     exception=False, content_type=None, **kwargs):
            new_data = {
                'state': state,
                'tip': tip
            }
            new_data.update(kwargs)
            if data:
                new_data['data'] = data
            super().__init__(data=new_data, status=None,
                             template_name=None, headers=None,
                             exception=False, content_type=None)
    View Code

     二、loggers.py

      1、settings.py:

    # 日志
    
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        # 可选日志格式
        'formatters': {
            'verbose': {
                'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
            },
            'simple': {
                'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
            },
        },
        # 可选日志过滤级别
        'filters': {
            'require_debug_true': {
                '()': 'django.utils.log.RequireDebugTrue',
            },
        },
        # 日志生成器
        'handlers': {
            # 打印到控制台的配置
            'console': {
                'level': 'WARNING',
                'filters': ['require_debug_true'],
                'class': 'logging.StreamHandler',
                'formatter': 'simple'
            },
            # 记录到文件的配置
            'file': {
                'level': 'ERROR',
                # 日志文件会轮转保存
                'class': 'logging.handlers.RotatingFileHandler',
                # 日志文件路径
                'filename': os.path.join(os.path.dirname(BASE_DIR), "logs", "luffy.log"),
                # 日志文件大小上限,这里代表300Mb,超过上限会开新文件
                'maxBytes': 300 * 1024 * 1024,
                # 日志文件的数量上限,这里代表10个,超过上限会自动删除最早的
                'backupCount': 10,
                'formatter': 'verbose',
                'encoding': 'utf-8'
            },
        },
        # 可选日志对象
        'loggers': {
            'logger_1': {
                'handlers': ['console', 'file'],
                # 是否让日志信息继续冒泡给其他的日志处理系统
                'propagate': True,
            },
        }
    }
    View Code

      2、配置:

    import logging
    
    # 对应配置中loggers的键
    common_logger = logging.getLogger('logger_1')
    
    # 使用
    # common_logger.error('日志内容')
    View Code

     三、exception.py

    from rest_framework.views import exception_handler
    from .response import CommonResponse
    from .loggers import common_logger
    
    
    # exc: 异常对象
    # context: 其他异常属性
    def common_exception_handler(exc, context):
        # 组织异常信息
        # context中取出发生异常的视图类的对象,进而得到类名
        msg = '来自<{}>的异常:<{}>'.format(context.get('view').__class__.__name__, str(exc))
        # 生成异常日志记录到文件
        common_logger.error(msg)
        # 先执行默认异常方法,得到response对象
        rep_obj = exception_handler(exc, context)
        # 没有返回,说明异常未被处理
        if not rep_obj:
            return CommonResponse(state=0, tip='未分类异常', error=msg)
        # 重新组织默认异常的返回格式
        else:
            return CommonResponse(state=0, tip='已知异常', error=rep_obj.data)
    View Code

      

  • 相关阅读:
    String
    Array常用方法
    Array类
    ruby调试/练习时的小技巧
    集合类对象的遍历处理办法
    Tech road one step 7-Noc to 13-Nov
    Tech road one step 31-Oct 6-Nov
    TechRoad_oneStep_17-23 10
    TechRoad_oneStep_1001
    TechRoad_oneStep_0919
  • 原文地址:https://www.cnblogs.com/caoyu080202201/p/13332223.html
Copyright © 2011-2022 走看看