python - 使用 Flask-RESTPlus 时如何接受 String 类型字段 None

标签 python flask flask-sqlalchemy flask-restplus

<小时/>

我刚刚开始使用 Flask-restplus 进行开发,而且我不是母语人士,

但我会尽力尽可能清楚地描述我的问题。

我知道有一个fields模块位于 flask帮助我们定义和过滤响应数据类型,

如String、Integer、List等。

使用 fields 模块时有什么办法允许 NULL/None 吗?

以下是我使用字段模块捕获值的代码,

add_group = api.model(
        "add_group",
        {"team_groups": fields.List(fields.Nested(api.model("team_groups", {
            "name": fields.String(example="chicago bulls", description="name of add group"),
            "display_name": fields.String(example="bulls", description="display name of add group")})))})

如果数据类型为display_name不是String,会出现以下错误,

{
    "errors": {
        "team_groups.0.display_name": "123 is not of type 'string'"
    },
    "message": "Input payload validation failed"
}

我想要的是在输入display_name时,我可以输入bullsNone

<小时/>

引用资料/问题好像很少,我只找到了one result相关

针对我的问题,但最终转换为非空值来解决问题。

如果我的问题有任何部分不太清楚,

请告诉我,谢谢。

以下是我的开发环境:

flask-restplus 0.13.0 Python 3.7.4 postman 7.18.1

<小时/>

以下是我更新的代码:

from flask_restplus import Namespace, fields

class NullableString(fields.String):
    __schema_type__ = ['string', 'null']
    __schema_example__ = 'nullable string'

class DeviceGroupDto:
    api = Namespace("device/group", description="device groups")
    header = api.parser().add_argument("Authorization", location="headers", help="Bearer ")

    get_detail_group = api.model(
        "getdetail",
        {"team_groups": fields.List(fields.String(required=True,
                                                  description="team group id to get detail", example=1))})

    add_group = api.model(
        "add_group",
        {"team_groups": fields.List(fields.Nested(api.model("team_groups", {
            "name": fields.String(example="chicago bulls", description="name of add group"),
            "display_name": NullableString(attribute='a')})))})

如果我输入以下有效负载:(由 postman )

{
    "team_groups": [
        {
            "name": "chicago bulls",
            "display_name": null
        }
    ]
}

它仍然返回:

{
    "errors": {
        "team_groups.0.display_name": "None is not of type 'string'"
    },
    "message": "Input payload validation failed"
}

最佳答案

是的,您可以创建一个子类并使用它来代替默认子类,默认子类也将接受 None

class NullableString(fields.String):
    __schema_type__ = ['string', 'null']
    __schema_example__ = 'nullable string'

所以你的代码看起来像

{ "property": NullableString(attribute=value)}

另外您可以访问issue github.com/noirbizarre/flask-restplus/issues/179

关于python - 使用 Flask-RESTPlus 时如何接受 String 类型字段 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60314378/

相关文章:

python - 当客户端过早断开连接时,如何对 Flask 上的破损管道错误进行异常(exception)处理?

python - Perl 中 useragent 和 http 库的 Python3 等效项是什么?

python - 如何将 2 个按钮并排放置?

python - sqlalchemy.dialects.mysql 中的 INTEGER 在其 __init__ 方法中不带参数?

python - sqlalchemy postgres : AttributeError: can't set attribute

python - 使用 super() 和使用 self 从父类调用方法有什么区别?

flask - 在 Flask 中检查用户是否在线

Python WhiteNoise 在 Flask 应用程序中不是 gzip 压缩

python - gunicorn:开始:作业无法启动

python - 如何使用 unittest 测试我的 flask 应用程序?