关于apiflask的BASE_RESPONSE_SCHEMA设置的疑问

描述

当我设置了 BASE_RESPONSE_SCHEMA 时,我以为那些我没有使用output来装饰的接口都会应用这个schema,但其实并不是,在那些使用了input装饰器的接口上它并不会被应用到,我不明白为什么input装饰器会影响到它。

下面是一个基础的示例程序:

from apiflask import APIFlask, Schema
from apiflask.fields import Field, Integer, String

app = APIFlask(__name__)


class BaseResponse(Schema):
    code = Integer(required=True)
    message = String(required=True)
    data = Field()


class In(Schema):
    id = Integer(required=True)


app.config["BASE_RESPONSE_SCHEMA"] = BaseResponse


@app.post("/")
def index():            # BASE_RESPONSE_SCHEMA生效
    return {"code": 404, "message": "Not Found", "data": None}


@app.post("/id")
@app.input(In)
def post_id(json_data):     # BASE_RESPONSE_SCHEMA未生效
    return {"code": 404, "message": "Not Found", "data": None}


感谢反馈,昨晚确认了,这里 spec 生成的不同是一个 bug。我这两天会处理掉然后发一个新版本。不过顺便说一下,对于 BASE_RESPONSE_SCHEMA,必须要使用 output 装饰器才能正确工作,要不然它没法知道 data 字段对应的 schema 是什么,也没法进行格式化。

1 个赞

好的,我明白了,感谢辉哥的回答 :grinning:

1 个赞