检测 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",但这是处理您的用例的另一种方式。
在继续我的主要应用程序之前,我有一个初步的前端 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",但这是处理您的用例的另一种方式。