luffei---封装logger,封装全局异常,二次封装response,数据库配置,User模块User表配置,开放media访问和前台项目创建和配置

路飞后台配置之封装logger


使用步骤:

第一步:在配置文件写一个日志配置的字典

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
            'filename': os.path.join(os.path.dirname(BASE_DIR), "log", "luffy.log"),
            # 日志文件的最大值,这里我们设置300M
            'maxBytes': 300 * 1024 * 1024,
            # 日志文件的数量,设置最大日志数量为10
            'backupCount': 10,
            # 日志格式:详细格式
            'formatter': 'verbose',
            # 文件内容编码
            'encoding': 'utf-8'
        },
    },
    # 日志对象
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],
            'propagate': True,  # 是否让日志信息继续冒泡给其他的日志处理系统
        },
    }
}

第二步:创建一个存放在utils文件下的loggings.py,通过配置生成一个logger对象

import logging

logger = logging.getLogger('django')  # 从配置文件中,找名字叫django的那个配置

第三步:以后记录日志,就用这个logger对象

from utils.loggings import logger
logger.warning('!!!!')
logger.debug ('adsad')
...

建议以最短路径导入,还建议你用相对导入,路径长了可能程序会报错,报错原因就是循环导入。

以后再项目中不要使用print打印了,要使用日志输出。

路飞后台配置之封装全局异常


在utils文件夹下创建一个exceptions.py

from rest_framework.views import exception_handler
from rest_framework.response import Response

# 用这个配置文件的好处:无论你是开发阶段,还是上线阶段,取到的都是当前项目运行使用的配置文件
# 项目配置文件如果没写,会有默认的配置文件
from django.conf import settings
from utils.loggings import logger
def common_exception_handler(exc, context):
    # 只要走到这,说明程序出异常了,都需要记录日志,越详细越好
    request=context.get('request')
    view=context.get('view')
    ip=request.META.get('REMOTE_ADDR')
    path=request.path
    logger.error('程序出错了,错误视图类是:%s,用户ip是:%s,请求地址是:%s,错误原因:%s'%(str(view),ip,path,str(exc)))


    # 只处理了drf的异常,如果res有值,就是drf的异常,处理了,如果为None,就是djagno的异常,我们额外处理
    res = exception_handler(exc, context)
    if settings.DEBUG:
        if res:
            return Response({'code': 888, 'msg': res.data['detail']})
        else:
            return Response({'code': 999, 'msg': str(exc)})
    else:
        return Response({'code': 999, 'msg': '系统错误,请联系系统管理员'})

配置文件

# drf的配置
REST_FRAMEWORK = {
    'EXCEPTION_HANDLER': 'utils.exceptions.common_exception_handler',
}

路飞后台配置之二次封装response


原来的drf的Response类,不是特别好用,自己封装一个更好用的,以后我们用自己的。

在utils文件下创建一个response.py

from rest_framework.response import Response

class APIResponse(Response):
    def __init__(self, code=100, msg='成功', status=None, headers=None, **kwargs):
        data = {'code': code, 'msg': msg}
        if kwargs:  # 有值,说明传了除上面声明的以外,有其他的,要放到data字典中
            data.update(kwargs)
            # 还要调用父类的init完成初始化
        super().__init__(data=data, status=status, headers=headers)

使用

from rest_framework.views import APIView
from utils.loggings import logging
from utils.response import APIResponse
class Text(APIView):
    def get(self,request):
        logging.warning('!!!!')
        return APIResponse(code=300,err='mmymy')

路飞数据库配置


第一步:项目配置文件,加入数据库的链接地址

# 通过查询环境变量里的用户名和密码登入,没有则使用默认
user = os.environ.get('USER', 'luffy')
password = os.environ.get('PASSWORD', 'Luffy123?')
            # 数据库
            DATABASES = {
                'default': {
                    'ENGINE': 'django.db.backends.mysql',
                    'NAME': 'luffy_api',  # 数据库的名字
                    'HOST': '127.0.0.1',
                    'PORT': 3306,
                    'USER': user,  # 给数据库创建一个用户,叫luffy
                    'PASSWORD': password
                },
            }

第二步:由于,django的orm默认用的链接mysql的包是 MysqlDB,我们不用,我们用的是pymysql,所以,每次我们都,在__init__中加入两句话

import pymysql
pymysql.install_as_MySQLdb()

在django 2.0.7以后的版本,如果使用pymysql,django源代码报错,我们需要改django源码比较麻烦,所以以后不用pymysql了,我们用myselclient,以后不用写两句话了

pip install myselclient  # 安装不上的可以查看下面方案

解决方案:http://www.liuqingzheng.top/python/其他/01-各主流Linux系统解决pip安装mysqlclient报错/

也可以使用whl文件装:https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient

第三步:在数据库创建一个luffy用户,密码是Luffy123?,只能对luffy_api库有操作权限

-查看数据库的用户

select user,host,authentication_string from mysql.user;

-创建用户

# grant 权限(create, update) on 库.表 to '账号'@'host' identified by '密码'

grant all privileges on luffy_api.* to 'luffy'@'%' identified by 'Luffy123?';
grant all privileges on luffy_api.* to 'luffy'@'localhost' identified by 'Luffy123?';

User模块User表配置


用户板块,用户表:使用auth的user表,扩写。注意:决定使用auth的user表,要在迁移之前决定。

第一步:创建app

python ../../manage.py startapp user

第二步:去配置里注册app

INSTALLED_APPS=[
    ...,
    user,
]

第三步:扩写auth的user表

 class User(AbstractUser):  # 必须继承AbstractUser
        # 必须使用pillow模块
        icon = models.ImageField(upload_to='icon', default='icon/default.png')

        class Meta:
            db_table = 'luffy_user'  # 修改表名
            verbose_name = '用户表'  # admin的后台管理中显示的中文
            verbose_name_plural = verbose_name

        def __str__(self):  # print User的对象时,会显示它返回的数据
            return self.username

第四步:去配置文件配置

AUTH_USER_MODEL='user.User'  # app名字.类名

第五步:执行两条迁移命令

python manage.py makemigrations
python manage.py migrate

如果项目已经开始写了,再决定用auth的user表扩写:

-1 删库----》重新创建出这个库---》里面没有表
-2 删除项目中所有的迁移文件
-3 删除源码中admin和auth这两个app的迁移文件
-4 再去迁移

开放media访


需要在小的luffyapi目录下(和apps同级)创建一个media文件夹,里面再创建一个icon文件夹存放头像,然后去配置。

在配置文件中

# media的配置
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

在urls.py 中

from django.views.static import serve
from django.conf import settings
urlpatterns = [
    ...,
    path('media/<path:path>', serve, {'document_root': settings.MEDIA_ROOT}),
]

路飞前台项目创建和配置


cmd中进去存放vue项目的路径创建luffy的前台项目

vue create luffycity  # 选择之前配置好的选项即可

然后该删的删除,保留个首页即可。

posted @ 2022-07-05 20:34  早安_1207  阅读(59)  评论(0)    收藏  举报
返回顶端