路飞后台配置之封装logger、全局异常、二次封装response、数据库配置、User模块User表配置、路飞前台项目创建和配置
路飞后台配置之封装logger#
# 使用步骤:
第一步:写一个日志配置的字典(atm项目)
第二步:通过配置生成一个logger对象
第三步:以后记录日志,就用这个logger对象
logger.debug ....
# # 建议以最短路径导入,还建议你用相对导入 可能程序会报错,报错原因就是循环导入
# 以后再项目中不要使用print打印了,要使用日志输出
log配置
配在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': '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/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': '系统错误,请联系系统管理员'})
settings(开发过程中dev)配置文件#
# drf的配置
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'utils.exceptions.common_exception_handler',
}
调试模式的使用方法#
路飞后台配置之二次封装response#
# 原来的drf的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 utils.response import APIResponse
# #
return APIResponse(code=102, msg='失败', err='错误信息')
路飞数据库配置#
原来的pymysql在django2版本往上,每次使用mysql需要改配置文件
使用myselclient代替
#使用步骤
# 第一步,项目配置文件,加入数据库的链接地址
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__中加入两句话,[猴子补丁]--->在django 2.0.7以后的版本,如果使用pymysql,django源代码报错----》改django源码---》麻烦---》以后不用pymysql了
import pymysql
pymysql.install_as_MySQLdb()
# myselclient---》跟pymysql师出同源---》以后不用写两句话了
pip install myselclient
# 第三步:在数据库创建一个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?';
mysql常用指令
1、登陆:mysql -u root -p
2、查看现有用户:select host ,user ,authentication_string from mysql.user;
3、新建用户:create user 'username'@'host' identified by 'password'
eg: create user "testuser"@'host' identified by "123456"
4、删除用户:drop user "username"@"localhost"
5、修改用户权限
grant 权限 on 数据库名.表名 to 'username'@"localhost";
eg: grant select on testdatase.* to 'user1'@'localhost'; //给user1用户添加对testdatabse数据库的查权限。
flush privileges //刷新权限
6、查看权限
show grant for 'username'@'%'
7、删除权限
revoke select on testdatase.* to 'user1'@'localhost';
8、更改用户名:rename user 'user1'@'localhost' to 'user2'@'localhost'
9、修改密码:set password for "username"@'localhost' = password('123456')
10、连接数据库报错:connect database failed, (1045, "Access denied for user 'user1'@'192.168.31.124' (using passwor
只要重新去改一下user1的密码:set password for "user1"@'localhost' = password('123456')
myselclient安装失败解决方案
# myselclient---》跟pymysql师出同源---》以后不用写两句话了
-装这个东西看人品---》有可能你机器装不上
-如果装不上,使用whl文件装
-https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
-尤其在linux系统上
http://www.liuqingzheng.top/python/%E5%85%B6%E4%BB%96/01-%E5%90%84%E4%B8%BB%E6%B5%81Linux%E7%B3%BB%E7%BB%9F%E8%A7%A3%E5%86%B3pip%E5%AE%89%E8%A3%85mysqlclient%E6%8A%A5%E9%94%99/
User模块User表配置,开放media访问#
用户板块,用户表--->使用auth的user表,扩写
决定使用auth的user表,要在迁移之前决定
步骤:#
第一步:创建app
python ../../manage.py startapp user
第二步:注册app
第三步:扩写auth的user表
from django.db import models
from django.contrib.auth.models import AbstractUser
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访问#
在配置文件中
# media的配置
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
在urls.py 中(想让某个app的此文件夹访问就写在分路由)
path('media/<path:path>', serve, {'document_root': settings.MEDIA_ROOT}),
路飞前台项目创建和配置#
在cmd窗口内:
在创建项目前先切换到想要创建项目的文件夹路径
vue create luffycity
选项配置选之前自己自定义的,直接创建
进入项目之后,除了homeview文件与app.vue文件,其余没有用的全部删除
app.vue
HomeView.vue
router下的index.js
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?