首页 > 数据库 >【luffy】后台配置、数据库配置、User表配置、前台配置、安装axios

【luffy】后台配置、数据库配置、User表配置、前台配置、安装axios

时间:2022-11-07 23:48:15浏览次数:43  
标签:axios 配置 code User luffy 日志 异常 id

目录

1. 关于环境变量的问题

1. 相对导入和绝对导入
       相对导入必须从环境变量下开始导 sys.path
       如果报包找不到的错,确认环境变量
   绝对导入,以当前文件为基准导入
       它不能以脚本形式运行,只能当包用
2. 导入包,pycharm提示错误,不一定真的有错,只要再环境变量中,就没有问题
   想让pycharm不报错,把你加入到环境变量的路径,设为source root

2. 路飞后台配置之封装logger

1. 每个项目,都需要记录日志
    -后期可以通过日志排查问题,分析错误
    -分析用户行为。。。
    
2. 之前学过logging模块,djagno就是基于原生的logging模块

3. 在项目中集成日志,如果做
    -第一:复制代码,放到配置文件dev.py中
    -第二:在utils中新建common_logger.py
        import logging
        # 通过配置问中的名字拿到logger对象,以后只需要导入,直接使用对象写日志即可
        logger=logging.getLogger('django')
        
    -第三步:在想用的地方,导入(注意路径),直接使用logger.info....
# 日志相关配置
# 真实项目上线后,日志文件打印级别不能过低,因为一次日志记录就是一次文件io操作
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), "logs", "luffy.log"),
            # 日志文件的最大值,这里我们设置300M
            'maxBytes': 300 * 1024 * 1024,
            # 日志文件的数量,设置最大日志数量为10
            'backupCount': 10,
            # 日志格式:详细格式
            'formatter': 'verbose',
            # 文件内容编码
            'encoding': 'utf-8'
        },
    },
    # 日志对象
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],
            'propagate': True, # 是否让日志信息继续冒泡给其他的日志处理系统
        },
    }
}

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

# drf,处理了全局异常,只需要写个函数,配置在配置文件中,出了异常,这个函数就会执行
# 写一个函数,封装全局异常
    1 统一返回格式
    2 记录日志:出了异常,程序有问题,后期排查问题
    
# 使用步骤
	1 新建一个exceptions.py
    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):
        # 程序出了异常,会走到这,我们都要记录日志
        # 请求地址,请求方式,请求时间,请求哪个视图函数,如果登录了,记录一下用户id
        request = context.get('request')
        try:
            user_id = request.user.pk
            if not user_id:
                user_id = '匿名用户'
        except:
            user_id = '匿名用户'
        view = context.get('view')
        logger.error('用户:【%s】,使用:【%s】 请求,请求:【%s】 地址,视图函数是:【%s】,出错了,错误是:【%s】' % (
            user_id, request.method, request.get_full_path(), str(view), str(exc)
        ))
        # 第一步:执行一下原来的异常处理:它只处理drf的异常,django的异常没有处理
        # res如果有值是Response的对象,说明是drf的异常
        # res如果是None,说明是django的异常
        res = drf_exception_handler(exc, context)
        # 在这里,可以通过状态码,把异常分的更细一些:比如有数据的异常,除以0的异常,列表越界异常。。。。
        if res:
            # drf异常
            # res=Response(data={'code':999,'msg':'服务器出错,请联系系统管理员'})
            res = Response(data={'code': 999, 'msg': res.data.get('detail', '服务器出错,请联系系统管理员')})
        else:
            # django的异常,状态码是888,错误信息是  exc异常对象转成字符串
            res = Response(data={'code': 888, 'msg': str(exc)})

        return res
	# 在配置文件中配置
        REST_FRAMEWORK = {
        # 以后,只要出异常,就会执行exception_handler
            'EXCEPTION_HANDLER': 'utils.exceptions.exception_handler',
        }

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

# drf提供的Response对象,不能很方便的加入code和msg字段,自己封装一个Response类,以后都用我们自己封装的,方便咱们写code和msg

# 封装步骤:
1. 在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.update(kwargs)
            super().__init__(data=data, status=status, headers=headers)
            
2. 以后再视图类中,导入使用即可
   class TestView(APIView):
      def get(self, request):
        # l = [1, 2, 3]
        # print(l[1])
        # 以后使用APIResposne(token='asdfasdf')---->前端收到的样子 {code:100,msg:成功,token:asdfasdf}
        # 以后使用APIResposne(result=[{id:1,name:三国,price:12},{id:2,name:西游记,price:12}])---->前端收到的样子 {code:100,msg:成功,result:[{id:1,name:三国,price:12},{id:2,name:西游记,price:12}]}
        # return Response(status=200,headers={})
        # return APIResponse(token='asfdasfd')
        return APIResponse(result=[{'id': 1, 'name': '三国', 'price': 12}, {'id': 2, 'name': '西游记', 'price': 12}])	

5. 路飞数据库配置

# 数据库使用mysql,配置mysql
# 之前使用root用户作为项目的数据库用户,权限太高了,一般公司里,给项目单独建立一个用户,这个用户只对当前库有权限
# 在mysql中创建一个用户luffy_api,给用户授予luffy库的所有权限
   1. 链接mysql,创建一个luffy库
    	-命令行创建
        -navicate客户端创建
   2. 查看有哪些用户
      select user,host from mysql.user;
   3. 创建一个luffy_api用户(之前有个root用户,权限很高)
      #授权账号命令:grant 权限(create, update) on 库.表 to '账号'@'host' identified by '密码'
      # 把luffy库下所有表的权限都授予luffy_api这个用户,允许远程链接
      grant all privileges on luffy.* to 'luffy_api'@'%' identified by 'Luffy123?';
      # 把luffy库下所有表的权限都授予luffy_api这个用户,允许本地链接
      grant all privileges on luffy.* to 'luffy_api'@'localhost' identified by 'Luffy123?';
    
   4. 以luffy_api用户登录,查看,只能看到luffy库









标签:axios,配置,code,User,luffy,日志,异常,id
From: https://www.cnblogs.com/cainiaozhy/p/16867907.html

相关文章

  • Docker介绍和Docker安装配置
    Dockers:是一种虚拟化容器技术,解决了以前在Linux安装MySQL等软件的繁琐步骤,而且某个软件工作出问题可能导致其他服务不可用。docker为每一个软件提供了容器互不干扰(在run......
  • sublime配置php
    sublime下载直接从sublime的官网下载安装文件:https://www.sublimetext.com/万物的起始:安装插件管理工具packagecontrol使用Ctrl+、(数字1左边那个)快捷键或者通过View......
  • Linux虚拟机配置
    1、安装linux虚拟机下载&安装VirtualBoxhttps://www.virtualbox.org/要开启CPU虚拟化可以去任务管理器查看是否开启  2.下载&安装Vagranthttps://app.va......
  • springboot多环境配置
    springboot整合多个环境配置springboot默认读取配置文件名称application,且多个环境配置文件必须按照如下命名Application-dev.yml开发环境application-test.yml......
  • grafana agent 配置支持faro-web-sdk试用
    faro-web-sdk对于grafana周边的使用属于一个all-in-one模式的,都是通过grafanaagent进行转发处理的参考架构  实际玩法实际上并不是需要grafancloud,实际上基于......
  • Archlinux + Dwm 配置流程
    本着学习C的态度来了解dwm,本身作为一个i3wm的追崇者,与dwm会擦出怎么样的火花呢?下载安装dwmarchlinuxcn源配置编辑/etc/pacman.conf文件,添加bfsu的archlinuxcn源sudovi......
  • Arch Linux + KDE 配置&美化(持续更新~)
    ArchLinux+KDE配置&美化(持续更新~)这篇文章着重记录archlinux+KDE的一个基本的配置过程。不包括安装过程(使用archInstall.sh)。内容大概有以下几点:当前美化进度......
  • Archlinux配置fcitx5
    fcitx5——Linux中最好用的中文输入法ArchLinux配置fcitx5输入法本文基于archlinux+dwm。其他的桌面环境以及窗口管理器,配置选项差不多。安装基础包fcitx5-im首......
  • Archlinux安装Picgo配置Typora
    Typora堪称为markdown界的老大哥,其大名我们多有耳闻,所见即所的就是他的特点。但是在日常使用中,也经常会碰到一些特别的需求,比如:希望图片能够上传到云端。怎么将markdown即......
  • Linux下Nginx配置
    目录1、全局块1.1、user指令1.2、worker_processes指令1.3、include用来引入其他配置文件,使Nginx的配置更加灵活1.4、events块1.5、http块1.5.1、定义MIME-Type1.5.2、自定......