0

我正在尝试在一个 python 解释器中同时运行一个 django 应用程序和一个 webapp2 应用程序。如here所述,我正在使用werkzeug 。

这是我的示例代码。

from werkzeug.wsgi import DispatcherMiddleware
from django_app import application as djangoapp
from webapp2_app import application as webapp2app

application = DispatcherMiddleware(djangoapp, {
    '/backend':     webapp2app
})

这样做之后,我希望所有对 /backend 的请求都应该被 webapp2 应用程序视为 /。但它将请求视为 /backend。使用 django 或烧瓶的其他 WSGI 应用程序可以很好地工作。该问题仅出现在 webapp2 应用程序中。有没有人有任何建议如何克服这个问题?有没有其他方法可以在不使用 werkzeug 为一个域下的多个 WSGI 应用程序提供服务的情况下实现我的目的?

4

1 回答 1

1

DispatcherMiddleware为您的应用程序特别是SCRIPT_NAME. FORCE_SCRIPT_NAME = ''Django 可以使用配置变量(docs)来处理它。

使用 Webapp2 会稍微复杂一些。您可以创建子类webapp2.WSGIApplication并覆盖__call__()方法并强制SCRIPT_NAME为所需的值。所以在你的webapp2_app.py可能是这样的

import webapp2

class WSGIApp(webapp2.WSGIApplication):

    def __call__(self, environ, start_response):
        environ['SCRIPT_NAME'] = ''
        return super(WSGIApp, self).__call__(environ, start_response)

# app = WSGIApp(...)
于 2013-07-21T19:48:17.973 回答