为什么ready()函数没有被执行呢?
例如有如下代码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()
函数里面完成。