情况:
我们有一个 Django 应用程序,它有一个普通的wsgi.py
模块,可以在运行时创建一个应用程序(WSGIHandler
)。然后通过 Nginx 提供应用程序。
问题:
wsgi.py
执行时,应该有一些启动代码执行一次。具体代码:
django.setup()
被调用)。当前解决方案:
我现在实现它的方式是使用上下文管理器(参见下面的代码)。乍一看看起来有点尴尬,但它的表现与预期一致。
问题:
WSGIHandler
提供请求(由模块变量application
指向)?application
完成之前开始向__exit__()
提供请求数据吗?wsgi.py
一次,之后'完成后,访问名为application
的模块变量。谁知道更好?wsgi.cfg (伪代码)
[uwsgi]
module = wsgi:application
wsgi.py
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_test.settings")
from startup import StartupContext
with StartupContext():
application = get_wsgi_application()
startup.py
class StartupContext():
def __enter__(self):
"""Run before django.setup() is called."""
setup_logging_for_python_process()
def __exit__(self, exc_type, exc_val, exc_tb):
"""Run after django.setup() is called."""
call_command(["showmigrations", "--plan"])