2016-04-18 13 views
7

Ho un caso per avere un'app preliminare Flask prima di continuare con la mia app principale.Rilevare se un'app Flask gestisce un URL

Ho implementato usando un "middleware" modello:

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) 

C'è un modo più idiomatico di fare questo, senza creare un contesto solo per verificare se l'URL viene gestito dal app? Voglio mantenere la flessibilità di mantenere due app.

risposta

3

Ogni flask.Flaskapp ha una proprietà url_map - che è un werkzeug.routing.Map. Si potrebbe basta eseguire bind_to_environ e utilizzare 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) 

Non so che io chiamerei "più idiomatica", ma è un altro modo di gestire il vostro caso d'uso.