我正在尝试在一个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应用程序?
答案 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(...)