作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我使用 WTForms 定义表单时,我可以添加一个 validate_<field name>
子类的方法,并且 WTForms 知道使用它来验证命名字段。我觉得这很有趣,因为方法的名称取决于字段类属性的名称。它是如何解决这个问题的?
class UploadForm(Form):
image = FileField("image file")
submit = SubmitField("Submit")
def validate_image(self,field):
if field.data.filename[-4:].lower() != ".jpg":
raise ValidationError("nope not allowed")
最佳答案
WTForms 在类被调用时检查类(调用类创建实例:form = Form()
)并记录字段及其名称。然后在验证期间,它会查看实例是否有方法 validate_<field_name>
.
在 FormMeta.__call__
内, 它使用 dir
函数列出类对象上定义的名称并记录字段。
for name in dir(cls): # look at the names on the class
if not name.startswith('_'): # ignore names with leading _
unbound_field = getattr(cls, name) # get the value
if hasattr(unbound_field, '_formfield'): # make sure it's a field
fields.append((name, unbound_field)) # record it
在 Form.validate
内它使用 getattr
函数尝试获取名称 validate_<field name>
的值对于它记录的每个字段。
for name in self._fields: # go through recorded field names
# get method with name validate_<field name> or None
inline = getattr(self.__class__, 'validate_%s' % name, None)
if inline is not None: # if there is such a method record it
extra[name] = [inline]
关于python - 如果 WTForms 被定义为验证字段,它如何知道使用 validate_<field name>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31687044/
我正在序列化程序中执行自定义字段级验证,该验证需要引用另一个字段。 查看Validation documentation中的示例,我不清楚应该使用validate_还是validate。看起来两者都具
当我使用 WTForms 定义表单时,我可以添加一个 validate_子类的方法,并且 WTForms 知道使用它来验证命名字段。我觉得这很有趣,因为方法的名称取决于字段类属性的名称。它是如何解决这
我是一名优秀的程序员,十分优秀!