Django项目启动执行(预加载 - 跨文件全局变量)
需求:在运行项目前进行一些数据初始化
实现步骤:
1、创建app
2、在settings文件中注册app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 创建的 app
'create_app',
]
3、在该app的__init__文件中设置default_app_config
default_app_config = 'create_app.apps.CreateApp'
4、在该app的apps文件中,继承AppConfig类、重写name属性和ready方法
其中,ame属性必须与注册的app名一致,ready方法中写入你的初始化行为逻辑代码
from django.apps import AppConfig
class CreateApp(AppConfig):
name = "create_app"
def ready(self):
# your code here
print("create_app is ready!")
5、执行python manage.py runserver ,可看到ready方法被调用
注意点:
若发现ready方法被调用了两次,大概是因为使用 python manage.py runserver 的方式启动项目,这样会启动两个进程,其中,一个进程会监听用户修改代码后重新启动。使用 python manage.py runserver --noreload 的方式启动项目,–noreload 会关闭监听代码修改重启。
2.若想调用AppConfig中的初始化数据,在需要调用的地方通过django的apps钩子可以获取 AppConfig 实例化对象,通过调用对象获取需要的数据。
from django.apps import apps
my_config = apps.get_app_config('create_app') # 此处填写需要获取的app名