0

django アプリと webapp2 アプリを 1 つの Python インタープリターで一緒に実行しようとしています。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 アプリでのみ発生します。これを克服するための提案はありますか?1 つのドメインで複数の WSGI アプリを提供するために werkzeug を使用せずに目的を達成できる方法はありますか?

4

1 に答える 1

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(...)
于 2013-07-21T19:48:17.973 に答える