Django 启动时预处理

Django | 预处理 | 自动执行脚本

Posted by luoruiqing on December 15, 2021

预处理

部分业务场景下,在 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() # 执行即可