gpt4 book ai didi

flask - 使用 Flask-RESTPlus 验证自定义字段

转载 作者:行者123 更新时间:2023-12-03 15:54:28 24 4
gpt4 key购买 nike

我正在尝试使用 Flask-RESTPlus 0.10.1 创建一个自定义字段来验证我的 API 中的 POSTed JSON

下面是基本设置...

from flask_restplus import fields
import re

EMAIL_REGEX = re.compile(r'\S+@\S+\.\S+')

class Email(fields.String):
__schema_type__ = 'string'
__schema_format__ = 'email'
__schema_example__ = 'email@domain.com'

def validate(self, value):
if not value:
return False if self.required else True
if not EMAIL_REGEX.match(value):
return False
return True

我喜欢 Swagger UI 中上述文档的方式,但我似乎无法弄清楚如何实际使用验证方法。

这是我如何使用自定义字段。
Json = api.model('Input JSON', {
'subscribers': fields.List(Email),
[...]
})


@api.expect(Json) // validate is globally set to true
def post(self):
pass

我有幸使用 'subscribers': fields.List(fields.String(pattern='\S+@\S+\.\S+'))相反,但这并没有给我自定义错误消息的控制权,我希望它在哪里返回该字段不是电子邮件类型。

我还继续添加了一个自定义 validate_payload我在 POST 方法中再次调用的函数(在 http://aviaryan.in/blog/gsoc/restplus-validation-custom-fields.html 中找到)(而不是 api.expect )。这需要我复制一些核心功能,并且除了 api.expect 之外每次都调用它。输出正确的 Swagger 文档和一点技巧以使其在嵌套字段中工作。

我的理解是这应该是开箱即用的?我错了吗?我在这里缺少什么?

最佳答案

我很欣赏这有点旧,但只是遇到了同样的问题。

看起来“验证”实际上位于python jsonschema impl上,如果您仍然对挖掘感兴趣,可以使用here

除此之外 - 您可以将 restplus API 配置为使用更好的格式检查器,如下所示:(我还验证日期时间和日期)

format_checker = FormatChecker(formats=["date-time", "email", "date"])
api_v1 = Api(
app, version='1.4',
title='[Anon]',
description='[Anon] API for developers',
format_checker=format_checker
)

关于flask - 使用 Flask-RESTPlus 验证自定义字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48893302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com