當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。