gpt4 book ai didi

python - 如果 WTForms 被定义为验证字段,它如何知道使用 validate_

转载 作者:行者123 更新时间:2023-11-28 22:42:29 25 4
gpt4 key购买 nike

当我使用 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/

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