当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Django AppConfig.ready用法及代码示例


本文介绍 django.apps.AppConfig.ready 的用法。

声明

AppConfig.ready()[source]

子类可以重写此方法来执行初始化任务,例如注册信号。一旦注册表完全填充,它就会被调用。

尽管您无法在定义了 AppConfig 类的 module-level 处导入模型,但您可以使用 import 语句或 get_model() ready() 中导入它们。

如果您正在注册 model signals ,则可以通过其字符串标签而不是使用模型类本身来引用发件人。

例子:

from django.apps import AppConfig
from django.db.models.signals import pre_save


class RockNRollConfig(AppConfig):
    # ...

    def ready(self):
        # importing model classes
        from .models import MyModel  # or...
        MyModel = self.get_model('MyModel')

        # registering signals with the model's string label
        pre_save.connect(receiver, sender='app_label.MyModel')

警告

尽管您可以如上所述访问模型类,但请避免在 ready() 实现中与数据库交互。这包括执行查询的模型方法( save() delete() 、管理器方法等),以及通过 django.db.connection 进行的原始 SQL 查询。您的 ready() 方法将在每个管理命令的启动期间运行。例如,即使测试数据库配置与生产设置分开,manage.py test 仍会针对生产数据库执行一些查询!

注意

在通常的初始化过程中,ready方法只被Django调用一次。但在某些极端情况下,特别是在摆弄已安装应用程序的测试中,ready 可能会被多次调用。在这种情况下,或者编写幂等方法,或者在AppConfig 类上放置一个标志,以防止重新运行应该只执行一次的代码。

相关用法


注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.apps.AppConfig.ready。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。