如何验证由浮点型字符串元组组成的字段?



我有这样的字段

coordinates = Tuple(
(Float(), Float()),
required=True,
)

内部坐标两个值:纬度和经度

我应该验证这些字段是否遵循以下条件"坐标":((-90.0, 90.0), (-180.0, 180.0))

有人知道怎么做吗? 我使用棉花糖图书馆

多谢

您可以使用@validates装饰器编写验证函数:

from marshmallow import fields, Schema, validates, ValidationError

class CoordinatesSchema(Schema):
coordinates = fields.Tuple(
(fields.Float(), fields.Float()),
required=True,
)   
@validates("coordinates")
def validate_coordinates(self, value):
if value[0] not in (-90.0, -180.0):
raise ValidationError("The first coordinate can only be -90.0 or -180.0.")
if value[1] not in (90.0, 180.0):
raise ValidationError("The second coordinate can only be 90.0 or 180.0.")

coords = {"coordinates": (-90.0, 180.0)}
CoordinatesSchema().load(coords)  # OK
coords = {"coordinates": (70.0, 180.0)}
try:
CoordinatesSchema().load(coords)  # ValidationError
except ValidationError as err:
print(err.messages)  # 'coordinates': ['The first coordinate can only be -90.0 or -180.0.']}

请注意,使用上述validate_coordinates函数,如果第一个和第二个坐标都无效,则只会报告第一个坐标。可以通过添加一个额外的if来检查两个坐标是否无效来解决此问题。

相关内容

  • 没有找到相关文章

最新更新