Loading

myapp/__init__.py和def ready(self)执行时机

下面分别介绍 myapp/__init__.pyready 方法的执行时机:

myapp/__init__.py 的执行时机

在 Python 里,__init__.py 文件用于把一个目录标记成 Python 包。在 Django 项目中,当导入该应用包时,__init__.py 文件就会被执行。

详细说明

  • 当 Django 启动并加载应用时,会对每个应用的 __init__.py 文件进行导入操作。这意味着在 Django 项目启动过程中,myapp/__init__.py 文件会在早期被执行。
  • 要是 __init__.py 文件里有全局变量或者函数调用,这些代码会在应用被导入时运行。例如:
# myapp/__init__.py
print("Initializing myapp...")

当 Django 启动并导入 myapp 时,就会输出 Initializing myapp...

ready 方法的执行时机

在 Django 里,ready 方法是 AppConfig 类的一个方法,其作用是在应用完成初始化之后执行一些额外的初始化操作。

详细说明

  • 位置ready 方法一般定义在应用的 apps.py 文件中的 AppConfig 子类里。例如:
# myapp/apps.py
from django.apps import AppConfig
from .queue_consumer import start_queue_listener

class MyAppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'myapp'

    def ready(self):
        start_queue_listener('my_queue')
  • 执行时机ready 方法会在 Django 完成所有应用的导入和配置之后执行。具体而言,当 Django 启动时,它会按以下步骤执行:
    1. 加载 Django 设置。
    2. 导入所有已安装的应用。
    3. 对每个应用的 AppConfig 类进行实例化。
    4. 调用每个 AppConfig 实例的 ready 方法。

所以,start_queue_listener('my_queue') 会在 Django 完成所有应用的初始化之后执行,此时可以确保所有依赖项都已准备就绪。

综上所述,myapp/__init__.py 在应用被导入时执行,而 ready 方法在 Django 完成所有应用的初始化之后执行。

posted @ 2025-04-15 17:17  一只大学生  阅读(39)  评论(0)    收藏  举报