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

Detecting whether a Flask app handles a URL

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

我使用 "middleware" 模式实现了它:

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 是否由应用程序处理?我想保持保​​留两个应用程序的灵活性。

每个 flask.Flask app 都有一个 url_map property - which is a werkzeug.routing.Map. You could just run bind_to_environ and use 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)

我不知道我会称它为 "more idiomatic",但这是处理您的用例的另一种方式。