首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用包含webargs的棉花糖模式验证数据库列表- use_kwargs - Error 422不可处理实体

无法使用包含webargs的棉花糖模式验证数据库列表- use_kwargs - Error 422不可处理实体
EN

Stack Overflow用户
提问于 2022-07-29 10:45:25
回答 1查看 217关注 0票数 2

我在Flask中有以下端点

代码语言:javascript
复制
from flask import Flask
from marshmallow import EXCLUDE, Schema, fields
from webargs.flaskparser import use_kwargs

app = Flask(
    __name__, static_url_path="", static_folder="static", template_folder="templates"
)


class Measure(Schema):
    type = fields.Int(required=True)
    value = fields.Float(required=True)
    unit = fields.Int(required=True)
    date = fields.Int(required=True)


class RequestSchema(Schema):
    measures = fields.List(fields.Nested(Measure))


@app.route("/save", methods=["POST"])
@use_kwargs(
    RequestSchema,
    location="json_or_form",
    unknown=EXCLUDE,
)
def save(**measures):
    return {"foo": measures}, 200

使用pytest,我测试以下内容:

代码语言:javascript
复制
import pytest

@pytest.fixture(scope="module")
def app():
    test_app = AppClientPublic()
    return test_app.app

def test_save(app):
    measures = [
        {
            "type": 1,
            "value": 2.2,
            "unit": 3,
            "date": 4,
        },
        {
            "type": 5,
            "value": 6.6,
            "unit": 7,
            "date": 8,
        },
    ]
    r = app.post(
        "/save",
        data={"measures": measures},
    )
    assert r.status_code == 200

我得到以下错误:

错误422不可处理实体:请求格式良好,但由于语义错误无法遵循。-{‘消息’:{‘json_或_form’:{‘措施’:{0:{'_schema':‘无效输入类型’},1:{'_schema':‘无效输入类型.’},'schema':,'headers':None}

但是,如果我直接验证同一字典:

代码语言:javascript
复制
d = {
    "measures": [
        {
            "type": 1,
            "value": 2.2,
            "unit": 3,
            "date": 4,
        },
        {
            "type": 5,
            "value": 6.6,
            "unit": 7,
            "date": 8,
        },
    ]
}

req_schema = RequestSchema()
errors = req_schema.validate(d)
print(errors)  # {} -> no errors

我没有发现验证错误。

我也绝对没有问题来验证简单的对象,比如深度-1字典,但是我无法验证Measure端点上的一个列表。

我做错了什么?

PS:

EN

回答 1

Stack Overflow用户

发布于 2022-08-17 08:27:50

问题在pytest方面,而不是Flask方面。

我将post调用更改为使用json而不是data

代码语言:javascript
复制
r = app.post("/save", json={"measures": measures})
# instead of 
r = app.post("/save", data={"measures": measures})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73165483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档