python - Flask 同时验证装饰器多个字段

标签 python validation flask sqlalchemy flask-sqlalchemy

我一直在使用来自flask 的sqlalchemy.orm 中的@validates 装饰器来验证字段,只要所有字段相互独立,一切都会顺利进行,例如:

@validates('field_one')
def validates_field_one(self, key, value):
   #field one validation

@validates('field_two')
def validates_field_two(self, key, value):
   #field two validation

但是,现在我需要进行一些验证,需要同时访问 field_one 和 field_two。看起来 validates 接受 validates 装饰器的多个参数,但是,它只会为每个参数运行一次验证函数,如下所示:

@validates('field_one', 'field_two')
def validates_fields(self, keys, values):
   #field validation

导致验证 field_one 然后验证 field_two 的工作流程。但是,我想同时验证两者(一个简单的例子是断言 field_one 的值不是 field_two 的值,其中一个例子是在 field_one 和 field_two 的图中不允许自循环指节点,它正在边缘上执行验证)。这样做的最佳方法是什么?

最佳答案

按照在模型上定义的顺序对字段进行排序。然后检查最后一个字段是否是正在验证的字段。否则只返回未选中的值。如果验证器正在验证较早的字段之一,则其中一些字段尚未设置。

@validates('field_one', 'field_two')
def validates_fields(self, key, value):
    if key == 'field_two':
        assert self.field_one != value
    return value

this example .

关于python - Flask 同时验证装饰器多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32555829/

相关文章:

python - 将 sqlalchemy-continuum 与 flask-sqlalchemy 和 flask-migrate 一起使用

python - 鸡蛋和零件之间的构建有什么区别?

r - R 中用于验证 data.frame 上特定列是否存在的函数

powershell - Powershell:在AD中检查重复的电子邮件

docker - Docker使Flask服务器运行,但是我无法通过浏览器连接到它

Flask-sqlalchemy:移动模型导致 InvalidRequestError - 已附加到 session

python - 将 PIL 图像转换为字节数组

python - 如何从sklearn AgglomerativeClustering遍历树?

python - 为什么python round(np.float16(np.pi),5) 返回无穷大?错误、限制或预期?

java - 如何在 Java 中使用 XSD 模式验证 XML