【发布时间】:2021-05-14 04:01:58
【问题描述】:
编辑:所以经过多一点挖掘之后,问题似乎(如果这是一个问题,可能是出于我无法理解的原因是故意的)与 Flask-Cognito (我用来通过 AWS 处理用户身份验证的 lib)有关- 我的许多路线都有装饰器@cognito_auth_required 和@cognito_group_permissions(['admin']),但似乎我不能将其应用于每个蓝图超过 1 条路线。然而,蓝图上的多条路线需要仅限于管理员用户。有没有办法可以跨多个路由应用这些装饰器?
更新代码以提供上下文。
-- 结束编辑--
抱歉,如果这是一个菜鸟问题,我对 Flask 还很陌生。
我正在编写一个 RESTful API,我正在注册多个蓝图以尝试保持代码干净,但是,当我尝试在本地运行我的程序时,我不断收到 AssertionError: View function mapping is overwriting an existing endpoint function: products.wrapper 消息。此错误仅在我实施第二个蓝图时才开始出现。
所有蓝图都是这样注册的:
api_base_url = '/api/v1'
app.register_blueprint(products, url_prefix=api_base_url+'/products')
app.register_blueprint(categories, url_prefix=api_base_url+'/categories')
if __name__ == "__main__":
application = app
application.debug = True
application.run()
在我的routes.py 文件中:
.. code omitted, Product + Category models imported from models ...
@products.route('/create', methods=['POST'])
@cognito_auth_required
@cognito_group_permissions(['admin'])
def products_create():
# code omitted for readability
return jsonify(error=False, message='New product created')
@categories.route('/create', methods=['POST'])
@cognito_auth_required
@cognito_group_permissions(['admin'])
def categories_create():
# code omitted for readability
return jsonify(error=False, message='New category created')
最初我让路由都指向两个不同的def all(): 函数,但我更改了它,希望多个具有相同名称的函数是问题所在,但无济于事。我不确定是什么导致了这个端点冲突——每个蓝图都有自己的 URL 前缀,所以它应该减轻端点冲突,但也许不是这种情况?是否有可能,因为蓝图是在程序启动之前注册的,所以它没有在检查冲突之前添加 URL 前缀?
任何帮助将不胜感激。干杯。
【问题讨论】: