Django/nginx在中使用上下文管理器wsgi.py公司

2024-09-29 19:22:42 发布

您现在位置:Python中文网/ 问答频道 /正文

情况:


我们有一个Django应用程序,它有一个普通的wsgi.py模块,在运行时创建一个应用程序WSGIHandler。然后通过Nginx为应用程序提供服务。你知道吗

问题:


wsgi.py执行时,应该有一些启动代码执行一次。具体代码如下:

  • 在初始化django之前对解释器进程进行初始化。你知道吗
  • 在django初始化后做一些事情(调用django.setup())。你知道吗

当前解决方案:


我现在实现它的方法是使用一个上下文管理器(参见下面的代码)。乍一看它有点笨拙,但它的表现和预期的一样。你知道吗

问题:


  • Nginx何时开始向WSGIHandler(由模块变量application指向)提供请求?你知道吗
  • 它会在__exit__()完成之前开始向application提供请求数据吗?你知道吗
  • 我的(未受过教育的)猜测是,Nginx以脚本样式自上而下执行一次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()

启动.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"])

Tags: 模块django代码pyimport应用程序wsgiapplication

热门问题