如何在没有decorator的情况下进行restapi密钥验证?

如何在没有decorator的情况下进行restapi密钥验证?,rest,flask,Rest,Flask,我是Flask的新手,我正在努力实现以下目标: 对于特定路由的所有子例程,我希望提取一个参数,并验证GET param或Header键是否提供了api键 理想的情况是如果我能设计出蓝图。然后我会做如下的事情: 有一个主蓝图来提取参数并验证api密钥: @secured_api.url_value_preprocessor def pull_tenant(endpoint, values): g.tenant_code = values.pop('tenant') @secured_ap

我是Flask的新手,我正在努力实现以下目标:

对于特定路由的所有子例程,我希望提取一个参数,并验证GET param或Header键是否提供了api键

理想的情况是如果我能设计出蓝图。然后我会做如下的事情:

有一个主蓝图来提取参数并验证api密钥:

@secured_api.url_value_preprocessor
def pull_tenant(endpoint, values):
    g.tenant_code = values.pop('tenant')

@secured_api.before_request
def validate_api_key():
    api_key = request.headers.get('X-Api-Key')
    ...
    if (api_key is None):
        raise InvalidApiKey()
然后,用我的资源(v1_bp)制作另一个蓝图,我可以:

secured_api.register_blueprint(v1_bp, url_prefix="/v1")
app.register_blueprint(secured_api, url_prefix='/secured/<tenant>')
secured\u api.注册\u蓝图(v1\u bp,url\u prefix=“/v1”)
app.register_blueprint(安全的_api,url_前缀='/secured/'))
因此,所有v1_bp路由都将处于/security//v1之下

实现这一目标的最佳方式是什么


提前谢谢

请进一步解释您的问题,它不清楚。@itmard:简而言之,我希望特定路由下的每个子例程检查提供的api密钥的有效性。比如说,所有在/保护之下的东西我都想检查api密钥。我想挂断根路由上的多个bluerprint/secured/bp1/.routes/secured/bp2/.routes类似这样的路由如果这是express(nodejs),我可以将“api密钥验证程序”中间件附加到/secured。并且把我剩下的路线也挂上了。但是我不能用flask做这件事,所以我想知道用flask做这件事的最好方法是什么。