2016-04-18 1 views
7

メインアプリケーションに進む前に予備のフロントエンドFlaskアプリケーションを使用するケースがあります。 URLは、アプリケーションによって処理されているかどうかだけをチェックするコンテキストを作成することなく、FlaskアプリケーションがURLを処理するかどうかを検出する

class MyMiddleware(object): 
    def __init__(self, main_app, pre_app): 
     self.main_app = main_app 
     self.pre_app = pre_app 

    def __call__(self, environ, start_response): 
     # check whether pre_app has a rule for this URL 
     with self.pre_app.request_context(environ) as ctx: 
      if ctx.request.url_rule is None: 
       return self.main_app(environ, start_response) 

     return self.pre_app(environ, start_response) 

これを行うためのより多くの慣用的な方法があります:

私はそれは、「ミドルウェア」のパターンを使用して実装しましたか?私は2つのアプリケーションを保持する柔軟性を維持したいと思います。

答えて

3

flask.Flaskappは、werkzeug.routing.Mapであるurl_mapプロパティを持ちます。あなたはだけbind_to_environを実行し、the test method from MapAdapterを使用することができます。私は「より多くの慣用的な」それを呼びたいということを知らない

if self.pre_app.url_map.bind_to_environ(environ).test(environ['PATH_INFO']): 
    return self.pre_app(environ, start_response) 

return self.main_app(environ, start_response) 

が、それはあなたのユースケースを処理する別の方法です。

関連する問題