Att*_* O. 50 python django django-middleware
我想在服务器启动(开发和生产)上执行这些代码行:
from django.core import management
management.call_command('syncdb', interactive=False)
Run Code Online (Sandbox Code Playgroud)
放入settings.py
它不起作用,因为它需要已经加载设置.
将它们放在视图中并从外部访问该视图也不起作用,因为有些中间件使用数据库而这些中间件将失败并且不允许我访问视图.
将它们放在中间件中会起作用,但每次访问我的应用程序时都会调用它.一个可能的解决方案可能是创建一个中间件来完成所有工作,然后将其自身移除,MIDDLEWARE_CLASSES
因此不再调用它.如果没有太多的猴子补丁,我可以这样做吗?
Kil*_*nDS 55
编写执行此操作的中间件,__init__
然后django.core.exceptions.MiddlewareNotUsed
从中获取__init__
,django将删除所有请求:).__init__
在启动时调用,而不是在第一个请求时调用,因此它不会阻止您的第一个用户.
有关于添加启动信号的讨论,但很快就无法获得(例如,一个主要问题是应该发送此信号)
相关票证:https://code.djangoproject.com/ticket/13024
更新: Django 1.7包括对此的支持.(文件,由机票链接)
Jos*_*ani 11
在 Django 1.7+ 中,如果您想运行启动代码,并且,
解决方案是:
文件:myapp/apps.py
from django.apps import AppConfig
def startup():
# startup code goes here
class MyAppConfig(AppConfig):
name = 'myapp'
verbose_name = "My Application"
def ready(self):
import os
if os.environ.get('RUN_MAIN'):
startup()
Run Code Online (Sandbox Code Playgroud)
文件:myapp/__init__.py
default_app_config = 'myapp.apps.MyAppConfig'
Run Code Online (Sandbox Code Playgroud)
这篇文章使用了 @Pykler 和 @bdoering 的建议
归档时间: |
|
查看次数: |
20646 次 |
最近记录: |