2016-04-18 13 views
7

Ich habe eine Vorabfrage für eine vorläufige Flask-App, bevor ich mit meiner Haupt-App fortfahre.Erkennen, ob eine Flask-App eine URL verarbeitet

Ich habe es ein „Middleware“ Muster implementiert:

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) 

Gibt es einen idiomatischen Weg, dies zu tun, ohne nur einen Kontext zu schaffen die URL zu überprüfen, ob die von der App behandelt wird? Ich möchte die Flexibilität beibehalten, zwei Apps zu behalten.

Antwort

3

Jede flask.Flaskapp hat eine url_map Eigenschaft - die eine werkzeug.routing.Map ist. Sie konnte nur bind_to_environ laufen und verwenden 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) 

Ich weiß nicht, dass ich es nennen würde „mehr idiomatische“, aber es ist ein weiterer Weg, um Ihren Anwendungsfall der Handhabung.