问题表现
如下图
经过排查,发现所有无法显示标题的接口在代码中都是加入了自定义的token校验装饰器permission_check:
@ns.expect(base_parser)
@permission_check("user_delete")
@ns.marshal_with(base_return_model)
def delete(self, user_id):
"""
用户删除接口
"""
pass
permission_check方法:
def permission_check(permission_alias):
def token_valid(func):
def wrapper(*args, **kwargs):
pass
return func(*args, **kwargs)
return wrapper
return token_valid
并且发现如果删除permission_check装饰器,标题就会正常显示.
解决方法
经过仔细检查是permission_check方法少写了一个装饰器@wraps,加上之后就正常了:
def permission_check(permission_alias):
def token_valid(func):
@wraps(func)
def wrapper(*args, **kwargs):
pass
return func(*args, **kwargs)
return wrapper
return token_valid
问题原因
根据@wraps装饰器的作用来看应该是改变了传入func的注释__doc__,导致页面未能获取到接口说明.
@wraps装饰器不改变使用装饰器原有函数的结构(如__doc__和__name__等)
通过控制台查看验证了上述猜测,不加@wraps装饰器的接口无法获取summary字段,导致无法显示接口标题.
记录一下踩坑流程,希望能够帮助更多的人.