我不是编程新手,但我是Python和Flask的新手。我有一个关于表单验证的设计问题。
我有一个注册表,捕获用户信息以及他们所属的公司。然后,表单验证该电子邮件是否已在使用中,但我还想验证该公司以前是否已注册。我不希望同一家公司注册超过一次。
尝试只匹配公司名称可能会导致问题,因为用户不一定拼写相同(例如:添加或省略标点符号)。我的想法是验证公司名称、街道地址号码和邮政编码中的前X个字符。如果有匹配,用户将不被允许注册,他们将不得不呼叫(或一些其他过程来确定)。
好吧,真正的问题是..。将验证添加到WTF表单是否更好?或者在模型中添加帮助器函数?我正在验证三个字段,但不知道哪一个是最佳实践。
编辑-我真的在问,如果我必须验证多个字段,我是将其添加到表单中还是使用模型中的助手函数?
谢谢你的帮助。
吉米
发布于 2014-03-21 23:04:28
在这种情况下,使用WTForms进行验证可能更好。向用户发送错误消息会更容易。
在WTForms中,很容易添加custom validator
class MyForm(Form):
company = TextField('Company', [Required()])
def validate_company(form, field):
if len(field.data) > 50:
raise ValidationError('Name must be less than 50 characters')然而,在您的情况下,这将不起作用,因为您想要处理多个字段。WTForms出手相救!您可以通过field enclosure验证公司的所有字段。这将允许您将“公司信息”视为一个字段,并验证每个字段。
class CompanyForm(Form):
name = StringField('Company name', [validators.required()])
address = StringField('Address', [validators.required()])
class RegistrationForm(Form):
first_name = StringField()
last_name = StringField()
company = FormField(CompanyForm, [your_custom_validation])您还可以向您的DB模型添加唯一性要求。不确定您的数据库是什么,但是MongoDB提供了unique_with要求。但是这不会做任何验证,如果你试图创建非唯一的数据库条目,它只会抛出一个错误。
https://stackoverflow.com/questions/22283844
复制相似问题