52

django的加载

django的applications加载

当django开始的时候,django.setup()首先会先遍历app的注册表。django通过加载django project的settings文件,建立logging文件,初始化app注册表。 这个函数会被自动调用:

  • 当django运行一个django's WSGI 支持的http服务对象.
  • 当运行一个管理命令的时候.

当然,如果在其他文件中调用的时候需要手动,显示的调用setup(),application registry 初始化分为三个阶段:

  1. 在django的setttings中的INSTALL_APPS 加入其它新加的项目时,在这个阶段中不应该导入models,一旦这个阶段完成以后,运行application 注册文件的API就可用了,例如 get_app_config().
  2. django将导入models子模块,当然models必须先定义了才可以在models.py或者models/init.py. 否则,application registry很可能在这个时刻不能被遍历,可能会造成ORM的失效。 当这个完成时,像get_model()就可以使用了。
  3. 最后,django运行每个app的ready()方法来注册。

AppRegistryNotReady 错误的说明

This exception also happens if you forget to call django.setup() in a standalone Python script.

以上这个东西是解决配置服务器过程中出现的错误,就是当一个单独的python脚本被调用的时候, 他是不能自己自动调用django.setup()的。

编码-1