我有一个案例,在继续使用我的主应用程序之前有一个初步的前端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是否由应用程序处理?我想保持保留两个应用程序的灵活性。
答案 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)
我不知道我称之为“更惯用”,但这是另一种处理用例的方式。