Flask表单验证设计

Jim*_*iel 5 python forms validation flask

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

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

试图仅仅匹配公司名称可能会导致问题,因为用户不一定拼写相同的东西(即:添加或省略标点符号).我的想法是验证公司名称中的前X个字符,街道地址编号和邮政编码.如果匹配,则不允许用户注册,他们将不得不打电话(或其他一些过程待确定).

好的,真正的问题......将验证添加到WTF表单是否更好?或者在模型中添加辅助函数?我正在验证三个领域并且不知道哪个是最佳实践.

编辑 - 我真的在问我是否必须在多个字段上进行验证,是将它添加到表单中还是在模型中使用辅助函数?

谢谢你的协助.

吉米

joe*_*and 1

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

在 WTForms 中,添加自定义验证器很容易:

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')
Run Code Online (Sandbox Code Playgroud)

然而,就您而言,这不起作用,因为您想要执行多个字段。WTForms 来救援!您可以通过现场围栏验证公司的所有字段。这将允许您将“公司信息”视为一个字段并对每个字段进行验证。

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])
Run Code Online (Sandbox Code Playgroud)

您还可以向数据库模型添加唯一性要求。不确定你的数据库是什么,但 MongoDB 提供了一个unique_with要求。但这不会进行任何验证,如果您尝试创建非唯一的数据库条目,它只会抛出错误。