检测Flask应用程序是否处理URL

时间:2016-04-18 10:22:36

标签: python flask werkzeug

我有一个案例,在继续使用我的主应用程序之前有一个初步的前端Flask应用程序。

我使用“中间件”模式实现了它:

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)

是否有更惯用的方法来执行此操作,而不创建上下文只是为了检查URL是否由应用程序处理?我想保持保​​留两个应用程序的灵活性。

1 个答案:

答案 0 :(得分:3)

每个flask.Flask app都有url_map属性 - 这是werkzeug.routing.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)

我不知道我称之为“更惯用”,但这是另一种处理用例的方式。