You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中apps.py是什么?请求结合简单示例讲解

Django中INSTALLED_APPS、AppConfig与Apps实例的工作流程

核心概念先理清楚

  • INSTALLED_APPS:是项目settings.py里的列表,用来告诉Django需要加载哪些应用,是应用注册的入口。
  • AppConfig:每个应用的配置类,负责管理应用的元数据(名称、显示名)、初始化逻辑(比如信号注册),相当于应用的"配置说明书"。
  • Apps类实例:Django全局的应用注册表,是个单例对象,存储所有加载完成的AppConfig实例,负责统一管理应用的生命周期。

用简单示例一步步拆解

1. 创建基础项目与应用

先通过命令行创建一个Django项目和自定义应用:

django-admin startproject myproject
cd myproject
python manage.py startapp myapp

2. 将应用加入INSTALLED_APPS

打开myproject/settings.py,把myapp添加到INSTALLED_APPS列表中:

# myproject/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 新增自定义应用
    'myapp',
]

此时Django会自动为myapp生成默认AppConfig实例——它会先检查myapp/apps.py里的配置类,如果找不到就用内置的默认AppConfig,把应用名myapp作为核心标识。

3. 自定义AppConfig(进阶操作)

startapp命令已经自动生成了myapp/apps.py,我们可以修改它来定制应用配置:

# myapp/apps.py
from django.apps import AppConfig

class MyappConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'myapp'  # 必须和应用名一致,是Django识别应用的唯一标识
    verbose_name = '我的自定义应用'  # 在后台管理等地方显示的友好名称

    def ready(self):
        # 应用加载完成后自动执行的初始化逻辑,比如注册信号
        import myapp.signals  # 假设我们有信号处理文件

要让Django使用这个自定义配置,有两种方式:

  • 方式一:在myapp/__init__.py中指定默认配置类
    # myapp/__init__.py
    default_app_config = 'myapp.apps.MyappConfig'
    
  • 方式二:直接在INSTALLED_APPS中写配置类的完整路径
    # settings.py的INSTALLED_APPS修改为
    INSTALLED_APPS = [
        ...
        'myapp.apps.MyappConfig',
    ]
    

4. 查看Apps实例如何管理AppConfig

Django启动时(比如运行runserver),会自动创建一个全局的apps实例(来自django.apps.apps,是Apps类的单例)。它会遍历INSTALLED_APPS中的每个条目,加载并实例化对应的AppConfig,最后把所有实例存在自己的app_configs字典里。

我们可以在shell中验证:

python manage.py shell

执行以下代码:

from django.apps import apps

# 获取所有已加载的AppConfig实例
all_apps = apps.get_app_configs()
for app in all_apps:
    print(f"应用名: {app.name}, 显示名: {app.verbose_name}")

# 获取指定应用的AppConfig实例
myapp_config = apps.get_app_config('myapp')
print(myapp_config.name)  # 输出 'myapp'
print(myapp_config.verbose_name)  # 输出 '我的自定义应用'

总结整个流程

  1. Django启动时,先加载settings.py,读取INSTALLED_APPS列表;
  2. 全局apps实例遍历列表中的每个应用,根据条目类型(应用名或配置类路径)加载对应的AppConfig类;
  3. 实例化每个AppConfig,把它们存储在apps实例的app_configs字典中;
  4. 所有AppConfig初始化完成后,自动调用每个实例的ready()方法,执行自定义初始化逻辑;
  5. 后续Django的各种操作(比如模型加载、路由解析),都会通过apps实例获取对应应用的配置信息。

内容的提问来源于stack exchange,提问作者aaaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:30:04