一、路飞项目全局日志配置

​ 那个代码不用死记硬背,知道一些地方是啥意思即可

1.复制django自带的日志模块的大代码到dev(settings)文件中
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': 'ERROR',
'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, # 是否让日志信息继续冒泡给其他的日志处理系统
},
}
} 2.因为要封装进utils 公共类库中,所以我们去utils下新建一个py文件
common_exceptions.py
import logging logger = logging.getLogger('django') 3.这样就配好了,在想要用日志的地方导入用即可
from lufei_api.utils.common_logger import logger
...
logger.info('info级别的日志~')
...

二、路飞项目全局异常处理封装

​ 其实就是drf写过的,自己写个函数,做到能处理drf异常又能处理其他异常,统一返回格式

1.一样的,封进utils中
utils新建common_exceptions.py
2.写函数 3.配置里配置一下EXCEPTION_HANDLER:‘’ 回顾一下drf的自定义全局异常处理
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

​ 依旧是drf写过的,定制后端返回的数据格式

1.去utils中创一个common_response.py文件
2.开始写自定义APIresponse
3.视图层直接拿来用即可
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)

四、路飞项目数据库准备

1.准备一个数据库的管理账号

​ 不能再用Root用户了,权限太高了,以后公司里肯定不会给开发root权限的数据库用户的

​ 会专门创建一个用户

1.我们先创建一个库
create database luffy
2.查看一下目前数据库存在的用户,以及支持的链接方式(分localhose本地链接即-p链接,127.0.0.1是通过-h 地址 进行网络链接)
select user,host,password from mysql.user;
3.开始创建我们需要的用户
grant all privileges on lufei.* to 'gao'@'%' identified by 'lufei123?';
# 解释 grant 权限(create, update) on 库.表 to '账号'@'host' identified by '密码'
grant all privileges on lufei.* to 'gao'@'localhost' identified by 'lufei123?';
# 上面这一句是再次给这个账号添加一种链接许可的方式,即支持本地链接
4.刷新一下权限
flush privileges;
5.现在我们就可以再次查看数据库所有的用户
select user,host,password from mysql.user;

2.项目链接数据库

先去pip安装一下mysqlclient

pip install mysqlclient -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

3.替换项目配置文件的用户名密码

我们以前写在settings里面的数据库的用户名和密码都是明文的,肯定是不行的

我们可以用os.environ.get()来取到环境变量中设置的键值对

举例:

1.去环境变量中添加键值对,注意要和自己数据库账号对上哦
2.添加完成后要重启电脑(windows)
3.然后自己试试取一下
import os
name = os.environ.get('MYSQL_USERNAME')
password = os.environ.get('MYSQL_PASSWORD')
print(name,password)
4.取到了就替换掉配置文件中的数据

4.拓写auth表

​ 一定注意!搞完这一块的东西后再去迁移

还有注意,先去创建一个user app ,然后注册下!

1.直接去user app下 创表
class User(AbstractUser):
# 扩写手机号和头像字段
mobile = models.CharField(max_length=11, unique=True)
# 需要pillow包的支持
icon = models.ImageField(upload_to='icon', default='icon/default.png') class Meta:
db_table = 'luffy_user'
verbose_name = '用户表'
verbose_name_plural = verbose_name def __str__(self):
return self.username 2.设置里面去配置auth对应的表
AUTH_USER_MODEL = 'user.User'
3.进行迁移
建议先cd出去,去根目录
python manage.py makemigrations
python manage.py migrate

五、路飞项目开启Media访问

# 配置文件加入
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') #自己在小路飞下创建一个media文件夹,塞一个图片待会测试 # 总路由中设置
from django.conf import settings
from django.views.static import serve path('media/<path:path>', serve, {'document_root': settings.MEDIA_ROOT})
# 访问
http://127.0.0.1:8000/media/icon/default.png # 以后使用djagno的配置文件都用这个
from django.conf import settings

补充:

软件开发模式

DevOps更接近实际中的敏捷开发,一边设计一边开发一边测试一边部署

今日注意:

1.字典的update方法,如果有一样的k,就替换,如果没有的K,就新增在尾部
2.执行命令行一定要清楚自己在哪一层,不然找不到manage.py就很尴尬

路飞项目 day02 全局日志、全局异常处理、封装Response、数据库准备的更多相关文章

  1. drf序列化高级、自定义只读只写、序列化覆盖字段、二次封装Response、数据库查询优化(断关联)、十大接口、视图家族

    目录 自定义只读 自定义只写 序列化覆盖字段 二次封装Response 数据库关系分析 断外键关联关系 ORM操作外键关系 ORM四种关联关系 基表 系列化类其他配置(了解) 十大接口 BaseSer ...

  2. 个人博客开发之blog-api 项目全局日志拦截记录

    前言 大型完善项目中肯定是需要一个全局日志拦截,记录每次接口访问相关信息,包括: 访问ip,访问设备,请求参数,响应结果,响应时间,开始请求时间,访问接口描述,访问的用户,接口地址,请求类型,便于项目 ...

  3. 学习ASP.NET Core(10)-全局日志与xUnit系统测试

    上一篇我们介绍了数据塑形,HATEOAS和内容协商,并在制器方法中完成了对应功能的添加:本章我们将介绍日志和测试相关的概念,并添加对应的功能 一.全局日志 在第一章介绍项目结构时,有提到.NET Co ...

  4. WPF 精修篇 全局为处理异常处理

    原文:WPF 精修篇 全局为处理异常处理 当我们写代码的时候 对代码错误异常处理 有的时候会 没做处理 比如 我们执行如下代码 会引发程序崩溃 private void Button_Click(ob ...

  5. 3.后台配置、环境变量、日志、异常处理、二次封装Response、路由组件

    目录 环境变量 封装logger 封装项目异常处理 二次封装Response模块 路由组件配置 环境变量 dev.py # 环境变量操作:小luffyapiBASE_DIR与apps文件夹都要添加到环 ...

  6. SpringBoot全局日志管理(AOP)

    1.在pom.xml中引入aop的jar包 <dependency> <groupId>org.springframework.boot</groupId> < ...

  7. 关于TornadoFx和Android的全局配置工具类封装实现及思路解析

    原文地址: 关于TornadoFx和Android的全局配置工具类封装实现及思路解析 - Stars-One的杂货小窝 目前个人开发软件存在设置页面,可以让用户自定义些设置,但我发现,存储数据的代码逻 ...

  8. Asp.Net Core 2.0 项目实战(4)ADO.NET操作数据库封装、 EF Core操作及实例

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  9. Luffy之虚拟环境.项目搭建,目录日志等配置信息

    1. 项目开发前 1.1 虚拟环境virtualenv 如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的 ...

  10. git的介绍、git的功能特性、git工作流程、git 过滤文件、git多分支管理、远程仓库、把路飞项目传到远程仓库(非空的)、ssh链接远程仓库,协同开发

    Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. [1] 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码 ...

随机推荐

  1. Codeforces Round #849 (Div. 4)

    A. Codeforces Checking 题意 每个案例给一个字符,如果在 "codeforces" 中出现过,输出 YES,否则输出 NO code /** * @autho ...

  2. Rocky Linux安装

    1.下载 VirtualBox并安装 https://www.virtualbox.org/wiki/Downloads 2.下载Rocky Linux 选择 Rocky-9.1-x86_64-dvd ...

  3. T-SQL——将字符串转换为多列

    目录 0. 使用ParseName 1. 具体到拆分为两列 2. 具体到拆分的指定的列数 志铭-2023年2月21日 0. 使用ParseName 注意:ParseName最多只能拆分为四列 Pars ...

  4. JAVA排序的方法

    //冒泡排序法: package fuxi;public class Bubble {    public static void main(String[] args) {        int a ...

  5. 【PyCharm】配置 Git

    一.前提条件 本地先安装好:PyCharm 和 Git 二.操作步骤 1.打开 File -> Settings -> Version Control -> Git,在 Path t ...

  6. Shiro+SpringBoot前后端分离中跨域,sessionId,302问题

    1.解决跨域 @Configuration public class CorsConfig { public CorsConfiguration buildConfig() { CorsConfigu ...

  7. 01.JavaSE学习

    一.java入门 java三大版本(write once,run anywhere) JavaSE:标准版(用于桌面开发,控制台开发) javaME:嵌入式开发(手机,小家电) javaEE:以jav ...

  8. Matplotlib 轴标签和标题

    我们可以使用 xlabel() 和 ylabel() 方法来设置 x 轴和 y 轴的标签. 实例 import numpy as np import matplotlib.pyplot as plt ...

  9. 区块链leveldb数据库安装

    一.首先,需要在电脑上安装boost库. 下载地址在这里,下载压缩包之后解压,Index of main/release/1.79.0/source. 解压完成后在解压好的文件夹里面进入cmd,之后运 ...

  10. 下载nodejs和vue

    下载nodejs https://nodejs.org/en 下载或更新npm npm install cnpm -g npm install -g vue 全局安装 创建一个基于 "web ...