项目使用

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')
posted @ 2024-05-15 19:46  蓝幻ﹺ  阅读(5)  评论(0编辑  收藏  举报