我希望在服务器启动时(开发和生产)执行这些代码行:
from django.core import management
management.call_command('syncdb', interactive=False)
将其放入settings.py
中不起作用,因为它要求已加载设置。
把它们放在一个视图中并从外部访问该视图也不起作用,因为有些中间件使用数据库,而这些中间件将失败,不允许我访问该视图。
将它们放在中间件中可以工作,但是每次访问我的应用程序时都会调用它们。一个可能的解决方案可能是创建一个中间件来完成所有的工作,然后将其自身从MIDDLEWARE_CLASSES
中移除,这样就不再调用它了。我能不需要太多的猴子修补吗?
如果同时使用Apache/mod_wsgi,请使用中描述的wsgi脚本文件:
http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html
在激活语言翻译后添加所需内容。
因此:
可以创建自定义命令并在handle函数中编写代码。这里有详细信息https://docs.djangoproject.com/en/dev/howto/custom-management-commands/
然后可以创建一个启动脚本,运行django服务器,然后执行新的自定义命令。
编写在
__init__
中执行此操作的中间件,然后从__init__
中引发django.core.exceptions.MiddlewareNotUsed
,django将为所有请求移除它:)。__init__
是在启动时调用的,而不是在第一次请求时调用,因此它不会阻止第一个用户。有人说要添加一个启动信号,但这不会很快实现(一个主要的问题是什么时候应该发送这个信号)
相关票证:https://code.djangoproject.com/ticket/13024
更新:Django 1.7包含对此的支持。(Documentation,由票证链接)
相关问题 更多 >
编程相关推荐