**
关于解决Flask中装饰器重复使用导致的视图函数覆盖问题
**
在编写Flask项目时,你可能会使用到装饰器去装饰多个视图函数,会导致:AssertionError:视图函数映射覆盖现有端点函数inner 的问题出现;
**
. 报错信息
**

**
原因
Flask要求您将单个“视图函数”与“端点”关联起来,调用多次装饰器,这就意味着将创建多个不同的函数(功能完全相同,但内存签名不同)。说白了,其实就是多个inner冲突了。
解决办法
**
- 方法一******使用 functools 模块
导入::import functools,在装饰器中添加 @wraps()
eg:
注:这个方法利用的是装饰器的修复技术,返回的结果是每个函数的名字。如果不加 functools 这个装饰器的话,每个函数都是 inner 用来区分每个 inner 。<

本文介绍了在Flask开发中遇到的视图函数覆盖问题,详细阐述了导致AssertionError的原因,并提供了三种解决方案:1) 使用functools模块的@wraps装饰器;2) 为装饰器添加断点设置inner._name_;3) 利用flask的endpoint参数明确区分端点。这些方法有助于避免装饰器重复使用造成的冲突。
最低0.47元/天 解锁文章
724

被折叠的 条评论
为什么被折叠?



