例如有如下代码apps.py
,这个app的名字是main
。
该文件位于./main/apps.py
:
from django.apps import AppConfig
class MainConfig(AppConfig):
name = 'main'
def ready(self):
print('我被执行了!')
首先,确保settings.py
中INSTALLED_APPS
包括了这个叫main
的app
:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'main',
]
其次,在./main/__init__.py
中添加配置,让Django知道你的AppConfig
文件在哪:
default_app_config = 'main.apps.MainConfig'
其中MainConfig
跟第一段代码中的class MainConfig(AppConfig)
是同一个东西。
现在,运行Django你就会发现ready()
被执行啦~!
当然直接用python manage.py runserver
的话会运行两次,这在开发环境下是没关系的。
如果你介意,可以使用命令python manage.py runserver --noreload
,在生产环境中一般都用uWSGI
,每个进程只会执行一次ready()
函数。
如果要注册signals
,或者连接非关系型数据库(NoSQL),可以在ready()
函数里面完成。