首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask表单验证设计

Flask表单验证设计
EN

Stack Overflow用户
提问于 2014-03-09 23:06:18
回答 1查看 3.5K关注 0票数 5

我不是编程新手,但我是Python和Flask的新手。我有一个关于表单验证的设计问题。

我有一个注册表,捕获用户信息以及他们所属的公司。然后,表单验证该电子邮件是否已在使用中,但我还想验证该公司以前是否已注册。我不希望同一家公司注册超过一次。

尝试只匹配公司名称可能会导致问题,因为用户不一定拼写相同(例如:添加或省略标点符号)。我的想法是验证公司名称、街道地址号码和邮政编码中的前X个字符。如果有匹配,用户将不被允许注册,他们将不得不呼叫(或一些其他过程来确定)。

好吧,真正的问题是..。将验证添加到WTF表单是否更好?或者在模型中添加帮助器函数?我正在验证三个字段,但不知道哪一个是最佳实践。

编辑-我真的在问,如果我必须验证多个字段,我是将其添加到表单中还是使用模型中的助手函数?

谢谢你的帮助。

吉米

EN

回答 1

Stack Overflow用户

发布于 2014-03-21 23:04:28

在这种情况下,使用WTForms进行验证可能更好。向用户发送错误消息会更容易。

在WTForms中,很容易添加custom validator

代码语言:javascript
复制
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验证公司的所有字段。这将允许您将“公司信息”视为一个字段,并验证每个字段。

代码语言:javascript
复制
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要求。但是这不会做任何验证,如果你试图创建非唯一的数据库条目,它只会抛出一个错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22283844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档