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')

浙公网安备 33010602011771号