预处理
部分业务场景下,在 Django 服务启动前需要执行一部分特定的操作,可以通过此方式配置。
1. 确认应用结构
1
2
3
4
5
6
7
8
├── manage.py
├── app01 # 你的应用目录
| ├── __init__.py
| ├── apps.py
| ├── views.py
| ├── ...
| └── start.py # 希望启动前执行的脚本
└── ...
例如你希望在 app01 中增加启动脚本 start.py
2. 指定配置
__init__.py , 指定变量: default_app_config
, 该配置用于指向 AppConfig
在应用中的子类; 格式: [目录].[类名]。
1
2
3
4
5
import os
if os.environ.get('RUN_MAIN', None) != 'true': # 阻止多次预处理
default_app_config = 'app01.App01Config' # App01Config 来源于 app01/apps.py 中的类名
3. ready 配置
apps.py , 利用 module_loading.autodiscover_modules
模块加载
1
2
3
4
5
6
7
8
9
10
from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules
class App01Config(AppConfig):
name = 'app01'
def ready(self) -> None:
autodiscover_modules('start.py')
4. 任务配置
start.py
1
2
3
4
5
6
7
8
9
10
11
from django.conf import settings
def task1():
# 运行你的初始化代码, 代码将会在每次启动前执行
print(settings.DATABASE)
task1() # 执行即可