WSGI如何获得调用它的URL?

我的问题似乎已经在上一个问题here中进行了讨论,但没有有效的答案。

在实际启动Django之前,我需要在WSGI python文件中分析被调用的URL并“读取”,这样我才能知道是谁调用了该URL并从中提取信息来确定我的方式。 Django应用将启动。

我有一个在VM上运行的应用程序,该应用程序从几个不同的URL调用,每个URL指向一个不同的WSGI文件,都在Django中运行完全相同的代码,但是使用了不同的'DJANGO_SETTINGS_MODULE'文件。调用我的应用程序的每个URL都有不同的设置文件。这是一个遗留项目,我无法更改。当前,它是这样运行的:

  • User1访问'user1.example.com'> WSGI将DJANGO_SETTINGS_MODULE设置为settings_user1> WSGI启动了Django
  • User2访问'user2.example.com'> WSGI将DJANGO_SETTINGS_MODULE设置为settings_user2> WSGI启动Django
  • User3访问'user3.example.com'> WSGI将DJANGO_SETTINGS_MODULE设置为settings_user3> WSGI启动了Django

每个URL都调用不同的WSGI文件,这些文件都运行相同的项目,但是将变量设置为适当的SETTINGS。

from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE","config.settings_user1")
application = get_wsgi_application()

我们正离开目前位于我们虚拟机所在的亚马逊,并计划改用Google AppEngine,但是我们不确定如何根据调用的URL指向不同的设置文件(如果使用相同的项目/版本。

我们可以简单地为每个URL使用不同版本的AppEngine,然后将URL称为“ user1-dot-example.appspot.com”,将每个版本的设置文件硬编码到wsgi上...但是这将需要为每个URL启动不同的实例。

期望能够在启动Django应用之前,通过URL'user1.example.com'访问我的应用时获得字符串'user1',而通过URL'访问我的应用时获得字符串'user2' user2.example.com”(原始URL,将使用Cloudflare重定向到AppEngine),因此我可以执行以下操作:

from django.core.wsgi import get_wsgi_application
url = SOME_CODE_THAT_GETS_THE_URL_HERE()
user = url.split('.example.com')[0]
os.environ.setdefault("DJANGO_SETTINGS_MODULE","config.settings_{}".format(user))
application = get_wsgi_application()

WSGI是否仍然可以检索调用该API的URL?甚至可能是gunicorn通过变量将其传递到WSGI的一种方法,以某种方式获取'$ URL'变量并执行以下操作:

gunicorn -b :$PORT wsgi:create_app(url=$URL)

甚至从AppEngine将URL导入app.yaml中的环境的方法也已经解决了问题。所需要做的就是在使用DJANGO_SETTINGS_MODULE实际设置Django之前拥有变量。

gaoshao1982 回答:WSGI如何获得调用它的URL?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3156092.html

大家都在问