UsersConfig()函数中的ready()函数是什么? - python

我无法理解此代码

from django.apps import AppConfig


class UsersConfig(AppConfig):
    name = 'users'

    def ready(self):
        import users.signals

某些信号已导入就绪功能,但是ready(self)功能在这里做什么?并且其中声明的name变量是内置关键字?我研究了文档,但我什么都没掌握。请解释一下这是什么意思

  子类可以重写此方法以执行初始化任务
  例如注册信号。一旦注册表被调用
  完全填充。
  
  尽管您无法在AppConfig的模块级别导入模型
  定义了类,您可以使用
  导入语句或get_model()。

并请用简单的语言解释一下。谢谢

python参考方案

Django应用程序仅仅是与django框架交互的python软件包。但是在某些时候,django需要保留这些软件包的记录。例如,用于创建迁移。

为了记录应用程序,django在内部维护了一个应用程序注册表,并使用从AppConfig(您在代码中发布的那个)继承的类的实例维护记录。

准备功能

如文档所述,

  注册表完全填充后立即调用。

我上面已经解释了他们在谈论什么注册表。

  一些信号在就绪功能中导入,但就绪后(自己)
  功能在这里做什么?

因为注册表一旦准备好,就会调用ready函数,

def ready(self):
    import users.signals

意味着文件users.signals文件将被同时导入,并且肯定会执行其中的代码并注册我们的信号。

现在,我们可以使用ready函数来执行一些需要在应用程序启动后立即执行的代码了(就像注册信号一样)。

  尽管您无法在AppConfig的模块级别导入模型
  定义了类,您可以使用
  导入语句或get_model()。

意味着我们无法以导入方式apps.py从此应用程序导入模型。

from users.models import SOME_MODEL

我们不能那样做。但是,如果我们需要使用ready函数访问某些模型,则AppConfig类具有get_model函数可以获取它们。

我希望它能清除您的想法。

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

如何在Django中解决模块名称冲突? - python

创建Django应用程序时出错:python端发生错误。退出代码:1,err:CommandError:'untitled1'与现有Python模块的名称冲突,因此不能用作项目名称。请尝试使用其他名称。 python大神给出的解决方案 您正在使用哪个版本的python?升级您的django版本或降级您的python版本,这应该可以解决问题。您可以在cl中执行…

处理后如何删除照片? - python

我的Django模型中有两个字段: class Staff(models.Model): photo = models.FileField(blank=True, null = True) encodings = JSONField() 我从表单获取照片,然后使用该照片获取编码。处理后如何删除照片?我试过了self.photo = None or self.…

django-compressor未与django-shop一起安装 - python

我无法使用django-shop安装django-compressor。出现这样的错误。Failed building wheel for rcssmin ================================= Failed building wheel for rjsmin -----------------------------------…

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…