在使用Werkzeug设置的多个WSGI应用程序中运行webapp2应用程序

时间:2013-07-21 17:48:25

标签: python wsgi webapp2 werkzeug

我正在尝试在一个python解释器中一起运行django应用程序和webapp2应用程序。我正在使用werkzeug描述here

这是我的示例代码。

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应用程序视为/。但它将请求视为/后端。这项工作使用django或flask与其他WSGI应用程序一起罚款。该问题仅出现在webapp2应用中。有没有人有任何建议如何克服这个?有没有其他方法可以实现我的目的而不使用werkzeug在一个域下提供多个WSGI应用程序?

1 个答案:

答案 0 :(得分:1)

DispatcherMiddleware为您的应用制作环境,尤其是SCRIPT_NAME。 Django可以使用配置变量FORCE_SCRIPT_NAME = ''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(...)