NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
创建完应用后,总目录如下: ~~~ mysite mysite/ manage.py mysite/ __init__.py settings.py # 配置应用 -- INSTALLED_APPS 变量 urls.py wsgi.py polls migratinos/ templates/ polls/ __init__.py admin.py apps.py # 配置应用 -- AppConfig 子类 models.py tests.py urls.py views.py ~~~ 配置应用: 1. 配置 INSTALLED_APPS 变量, 定义在 `setting.py` 文件中 2. 配置 AppConfig 子类(非必须),惯例定义在 `apps.py` 文件中 配置 INSTALLED_APPS ---------------------- - 参数:应用配置类 ~~~ # settings.py INSTALLED_APPS = [ 'polls.apps.PollsConfig', ] ~~~ 直接通过 应用配置类(AppConfig 子类),注册应用: ~~~ # polls/apps.py from django.apps import AppConfig class PollsConfig(AppConfig): name = 'polls' verbose_name = '投票' ~~~ - 参数:包含应用的 package 包 ~~~ # settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] ~~~ **default_app_config**: django 会寻找包中的 `default_app_config` 变量,该变量保存了 AppConfig 子类的路径。 以 admin 应用举例: ~~~ # D:\Anaconda3\Lib\site-packages\django\contrib\admin\__init__.py ... 略 ... default_app_config = 'django.contrib.admin.apps.AdminConfig' ~~~ **Notes**: 当通过应用中的 `__init__.py` 配置 `default_app_config` 时,需防止 apps 重名。 ~~~ ### in __init__.py # 此时名字会发生冲突: from django.apps import apps import apps # 引用应用自身的 apps 子模块 # 最好这样引用: from django.apps import apps as django_apps ~~~ 配置 AppConfig 子类 ---------------------- 详见:本节 > AppConfig 子类 对于应用 作者 ------------- 例如,创建一个可拔插重复使用的应用 `first_app`: ~~~ # settings.py INSTALLED_APPS = [ 'first_app.apps.FirstAppConfig', ] # first_app/apps.py from django.apps import AppConfig class FirstAppConfig(AppConfig): name = 'first_app' verbose_name = "第一个应用,给其他用户使用" # first_app/__init__.py default_app_config = 'first_app.apps.FirstAppConfig' ~~~ 这样,其他用户就可以直接使用而无需重复配置应用了。 对于应用 用户 -------------- 例如,新项目中使用 `first_app`: 首先,通过 pip 安装第三方应用 `first_app`。 其次,创建自己的应用 `my_app`。 最后,配置 `my_app`。 ~~~ # settings.py INSTALLED_APPS = [ 'my_app.apps.MyAppConfig', ] # my_app/apps.py from first_app.apps import FirstAppConfig class MyAppConfig(FirstAppConfig): verbose_name = "把 first_app 变成了 my_app" ~~~