首页 > 其他分享 >路飞1

路飞1

时间:2023-03-02 20:35:36浏览次数:28  
标签:utils Response 路飞 user luffy 日志 logger

后台日志封装

日志的作用就是用来记录一些错误信息和操作的,所以我们在以后的项目中都尽量不要出现print了,以后都使用日志 logger.info() ,以后只需要调整日志级别就好了

日志的操作步骤
    Django中集成日志步骤,使用的就是python内置的日志模块
    1.在配置文件中加入日志配置
    2.在utils中新建 common_logger.py,得到日志对象
        import logging
        logger = logging.getLogger('django')
    3.在任意想用日志的地方导入使用就可以了
        from utils.common_logger import logger
        logger.info('info级别的日志')
        logger.error('error级别的日志')
日志配置
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': 'INFO',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'file': {
            # 实际开发建议使用ERROR
            'level': 'WARNING',
            'class': 'logging.handlers.RotatingFileHandler',
            # 日志位置,日志文件名,日志保存目录必须手动创建,注:这里的文件路径要注意BASE_DIR代表的是小luffyapi
            '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,  # 是否让日志信息继续冒泡给其他的日志处理系统
        },
    }
}

全局异常处理封装

无论后端是否出错,前端接收的格式都要统一
三大认证、视图类的方法中只要出了异常,就或执行一个函数,但是该函数只能处理drf的异常,所以我们需要自己写个函数,既能处理drf的异常,又能处理django的异常,然后返回一个统一的格式

使用步骤
    1.在utils中新建 common_exceptions.py
    2.写一个函数
    3.配置配置文件,以后只要出了异常就会走上面的函数
        REST_FRAMEWORK = {
            'EXCEPTION_HANDLER': 'utils.common_exceptions.exception_handler',
        }
    
from rest_framework.views import exception_handler as drf_exception_handler
from rest_framework.response import Response
from utils.common_logger import logger


# 只要走到这个函数中,一定是出异常了,所以要记录日志
def exception_handler(exc, context):
    # 1 记录日志 : 哪个ip地址,用户id是多少,访问哪个路径,执行哪个视图函数,出了什么错
    request = context.get('request')
    view = context.get('view')
    ip = request.META.get('REMOTE_ADDR')
    user_id = request.user.pk
    path = request.get_full_path()
    response = drf_exception_handler(exc, context)
    if response:
        logger.warning('drf出了异常,异常是:%s' % str(exc))
        # drf的异常已经处理了--->直接取detail 会有点小小的问题,碰到再解决
        res = Response({'code': 999, 'msg': response.data.get('detail', '服务器异常,请联系系统管理员')})
    else:
        # djagno的异常,咱们要处理
        logger.error('用户【%s】,ip地址为【%s】,访问地址为【%s】,执行视图函数为【%s】,出错是【%s】' % (user_id, ip, path, str(view), str(exc)))
        res = Response({'code': 888, 'msg': '服务器异常,请联系系统管理员'})

    return res

封装Response

ref本身有Response,但是我们可以通过自己写代码来固定前端收到的格式
例如:
    Response封装后code,msg可以不传,其他的传了什么就显示什么

1.在utils下新建common_response.py
2.封装APIResponse
3.导入使用
class APIResponse(Response):
    def __init__(self, code=100, msg='成功', status=None, headers=None, **kwargs):
        data = {'code': code, 'msg': msg}
        if kwargs:
            data.update(kwargs)
        super().__init__(data=data, status=status, headers=headers)

luffy数据库创建

创建库和用户

创建库
    1.管理员创建luffy库
        mysql -uroot -p密码  # 管理员连接数据库
        create database luffy default charset=utf8;  # 创建数据库
    2.查看用户
        select user,host,password from mysql.user;  # 5.7之前的版本
        select user,host,authentication_string from mysql.user;  # 5.7之后的版本

创建用户,授予luffy库的权限
    1.设置权限账号密码
        grant 权限(create, update) on 库.表 to '账号'@'host' identified by '密码';
    2.配置任意ip都可以连到数据库的账户
        grant all privileges on luffy.* to '账号'@'%' identified by '密码';
    3.由于数据库版本的问题可能本地连接不上,需要给本地用户单独配置
        grant all privileges on luffy.* to '账号'@'localhost' identified by '密码';
    4.刷新权限
        flush privileges;

标签:utils,Response,路飞,user,luffy,日志,logger
From: https://www.cnblogs.com/zyg111/p/17173363.html

相关文章