当前位置: 代码迷 >> python >> Flask表单验证设计
  详细解决方案

Flask表单验证设计

热度:81   发布时间:2023-07-14 08:47:33.0

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

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

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

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

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

谢谢你的协助。

吉米

在这种情况下,使用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')

但是,在您的情况下,这不起作用,因为您想要执行多个字段。 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])

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