项目使用
0 虚拟环境
- 创建虚拟环境
mkvirtualenv -p python3 luffy
- 在虚拟环境中装django
pip install django==4.2.13
django-admin startproject 项目名
- 安装第三方模块
# drf模块
pip install djangorestframework
# pillow----处理上传的图片文件
pip install djangorestframework
1 后端项目目录结构
"""
├── luffy_api
├── logs/ # 项目运行时/开发时日志目录 - 包
├── manage.py # 脚本文件
├── luffy_api/ # 项目主应用,开发时的代码保存 - 包
├── apps/ # 开发者的代码保存目录,以模块[子应用]为目录保存 - 包
├── libs/ # 第三方类库的保存目录[第三方组件、模块] - 包
├── settings/ # 配置目录 - 包
├── dev.py # 项目开发时的本地配置
└── prod.py # 项目上线时的运行配置
├── asgi.py # 项目上线
├── wsgi.py # 项目上线用
├── urls.py # 总路由
└── utils/ # 多个模块[子应用]的公共函数类库[自己开发的组件]
└── scripts/ # 保存项目运营时,测试的脚本文件 - 文件夹
"""
2 创建app
- 来到目录下:
cd luffy_api\luffy_api\apps
- 执行
python ../../manage.py startapp user
3 项目中注册app
setting.py
- 直接写app名字,运行报错:No module named 'user'
- 把apps目录加入到环境变量,以后注册app,只需要写名字即可
import sys, os
BASE_DIR = Path(__file__).resolve().parent.parent
apps = os.path.join(BASE_DIR, 'apps')
sys.path.insert(0, apps)
sys.path.insert(0, str(BASE_DIR))
4 以后配置文件会有多套
- 修改manage.py 本地运行可以了
os.environ.setdefault('DJANGO_SETTINGS_MODULE','luffy_api.settings.dev')
- 修改 asig.py wsgi.py , 如果不改,开发阶段,没有任何问题
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.pro')
5 国际化
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = False
6 数据库构建
6.1 创建luffy库,给项目使用
create database luffy default charset=utf8mb4;
6.2 查看用户
SELECT User, Host FROM mysql.user;
6.3 创建用户
- 创建名为 'luffy' 的用户,该用户只能从本地主机(localhost)连接,并设置密码
CREATE USER 'luffy'@'localhost' IDENTIFIED BY '123456';
- 创建名为 'luffy' 的用户,该用户可以从任何主机连接,并设置密码
CREATE USER 'luffy'@'%' IDENTIFIED BY '123456';
- 授予 'luffy'@'localhost' 用户对名为 'luffy' 的数据库的所有权限,并且允许用户授予或撤销其他用户对数据库对象的权限
GRANT ALL PRIVILEGES ON luffy.* TO 'luffy'@'localhost' WITH GRANT OPTION;
- 授予 'luffy'@'%' 用户对名为 'luffy' 的数据库的所有权限,并且允许用户授予或撤销其他用户对数据库对象的权限
GRANT ALL PRIVILEGES ON luffy.* TO 'luffy'@'%' WITH GRANT OPTION;
7 数据库连接
user = os.environ.get('MYSQL_USER', 'luffy')
password = os.environ.get('MYSQL_PASSWORD', '123456')
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
'NAME': 'luffy',
'HOST': '127.0.0.1',
'PORT': '3306',
'USER': user,
'PASSWORD': password
}
}
8 数据迁移
python manage.py makemigrations
python manage.py migrate
9 创建超级用户
python manage.py createsuperuser
10 日志
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, # 是否让日志信息继续冒泡给其他的日志处理系统
},
}
}
- 写一个
py
文件common_logger.py
import logging
logger = logging.getLogger('django')
- 以后不要写
print
了,统一用logger.info()
class LoggerView(APIView):
def get(self,request):
logger.info('你好')
return Response('ok')