3、后台封装

1、路飞后台配置之封装logger

每个项目应该都需要有日志功能,记录日志有利于排查错误

# django中使用日志

# 1.日志相关配置(跟原生日志一样,在django配置文件中复制日志字典)
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': {
            # 实际开发建议使用WARNING
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'file': {  # 文件显示
            # 实际开发建议使用ERROR
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            # 日志位置,日志文件名,日志保存目录必须手动创建,注:这里的文件路径要注意BASE_DIR代表的是小luffyapi,os.path.dirname(BASE_DIR)表示小路飞的上一层,也就是大路飞下创建logs目录
            'filename': os.path.join(os.path.dirname(BASE_DIR), "logs", "luffy.log"),
            # 日志文件的最大值,这里我们设置300M
            'maxBytes': 300 * 1024 * 1024,
            # 日志文件的数量,设置最大日志数量为10
            'backupCount': 10,
            # 日志格式:详细格式
            'formatter': 'verbose',
            # 文件内容编码
            'encoding': 'utf-8'
        },
    },
    # 日志对象
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],
            'propagate': True, # 是否让日志信息继续冒泡给其他的日志处理系统
        },
        'lqz': {
            'handlers': ['console'],
            'propagate': True,  # 是否让日志信息继续冒泡给其他的日志处理系统
        },
    }
}

# 2.新建utils/logging.py
import logging
def get_logger(l='django'):
    return logging.getLogger(l)

# 3.以后使用,导入,使用
from utils import logging
logger = logging.get_logger()
logger.info('我是日志')

2、路飞后台之封装异常处理

# 新建utils/exceptions.py
from rest_framework.views import exception_handler as drf_exception_handler
from rest_framework.views import Response
from rest_framework import status

from utils import logging
logger = logging.get_logger()


def exception_handler(exc, context):
    response = drf_exception_handler(exc, context)
    if response is None:  # drf没有处理的,django的异常
        # response = Response({'detail': '服务器异常,请重试...'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
        response = Response({'code': 999, 'msg': '服务器异常,请重试...'})
    else:
        response = Response({'code': 998, 'msg': response.data['detail']})
    # 记录服务器异常,drf和django的异常,都记录
    logger.critical('%s' % exc)
    return response



# 然后在配置文件中配置
REST_FRAMEWORK = {
    # 异常处理
    'EXCEPTION_HANDLER': 'utils.exceptions.exception_handler',
}

3、路飞后台之封装Response对象

封装一个自定义的Response对象,这样以后就用自定义的Response,可以少写代码

# 在utils/response.py下
from rest_framework.response import Response


class APIResponse(Response):
    def __init__(self, status=None, headers=None, **kwargs):
        data = {'code': 100, 'msg': '成功'}
        if kwargs:
            data.update(kwargs)

        super(APIResponse, self).__init__(data=data, status=status, headers=headers)
      
    
# 以后再用返回对象,使用自己定义的APIResponse对象
class IndexView(APIView):
    def get(self, request):
        return APIResponse(username='lqz',token='ssss')
posted @ 2022-02-03 15:02  黑影Poco  阅读(44)  评论(0)    收藏  举报