|
|
1
4
“编辑:PS-我考虑过使用post_init信号…用于访问数据库的代码,这是个好主意吗?” 从不
通常,您大约运行一次syncdb。数据库已创建。您的web应用程序使用数据库。 有时,您会更改设计,删除并重新创建数据库。然后您的web应用程序会长时间使用该数据库。
我不知道你为什么要惹我
编辑 清理记录是一回事。
你的
你的
你为什么不把你的逻辑放进去
|
|
|
2
2
在创建模型之前尝试访问模型的代码几乎只能存在于模块级别;正如您的示例所示,它必须是在导入模块时运行的可执行代码。正如您所猜测的,这就是syncdb失败的原因。它尝试导入模块,但导入模块的行为会导致执行应用程序级代码;一个“副作用”,如果你愿意的话。
顺便说一句,它不仅仅是一个可能导致代码意外执行的Web服务器。例如,如果您使用像epydoc这样的工具,他们将导入您的代码以生成API文档。这反过来会导致应用程序逻辑开始执行,这显然是仅仅运行文档解析器的一个不希望的副作用。
因此,像这样的清理代码最好由cron作业来处理,它会定期查找过时的作业并清理数据库。此自定义脚本也可以手动运行,也可以由任何进程运行(例如在部署期间,或作为单元测试的一部分)
我希望这有帮助。我知道它无法确定syncdb是否正在运行,但如果您在设计Django应用时考虑到生产部署,syncdb问题将神奇地消失。 |