Python 重写并验证Flask安全表单中的现有字段

Python 重写并验证Flask安全表单中的现有字段,python,flask,flask-security,Python,Flask,Flask Security,我正试图将使用Flask安全性构建的Flask应用程序中的注册限制为来自特定域的电子邮件地址 我的另一个倾向是从Flask Security中覆盖register\u user视图,但他们的文档让人觉得扩展表单是首选途径 在下面的代码中,我尝试将自定义验证器添加到电子邮件,该字段已在Flask Security的注册表中声明。永远不会调用附加验证函数。我曾尝试在类之外声明变量,并从电子邮件字段中调用它,但这似乎也没有帮助 这些都在app.py中 class RestrictedRegisterF

我正试图将使用Flask安全性构建的Flask应用程序中的注册限制为来自特定域的电子邮件地址

我的另一个倾向是从Flask Security中覆盖
register\u user
视图,但他们的文档让人觉得扩展表单是首选途径

在下面的代码中,我尝试将自定义验证器添加到
电子邮件
,该字段已在Flask Security的
注册表中声明。永远不会调用附加验证函数。我曾尝试在类之外声明变量,并从
电子邮件字段中调用它,但这似乎也没有帮助

这些都在app.py中

class RestrictedRegisterForm(RegisterForm):
    email = EmailField(
        'Email', validators=[DataRequired()]
    )

    def validate_email(form, field):
        domain_list = ['foo.com', 'bar.org']
        email_domain = field.data.split("@")[1]
        if email_domain not in domain_list:
            raise ValidationError('Email address must be of an authorized domain')

user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security = Security(app, user_datastore, register_form=RestrictedRegisterForm)

您的验证方法不应该被称为
validate\u email
,因为
email
是表单中字段的名称。它的签名应该是
def validate\u email(表单,字段):
。你说得对。这是最初的化身,但一旦我发现它不起作用,我就开始改变。现在又回到了那个形式。我刚刚在我自己的一个项目中运行了那个代码,它运行得很好-我确实使用了
InputRequired()
而不是
DataRequired()
。您如何验证表单?您的验证方法不应该被称为
validate\u email
,因为
email
是表单中字段的名称。它的签名应该是
def validate\u email(表单,字段):
。你说得对。这是最初的化身,但一旦我发现它不起作用,我就开始改变。现在又回到了那个形式。我刚刚在我自己的一个项目中运行了那个代码,它运行得很好-我确实使用了
InputRequired()
而不是
DataRequired()
。您如何验证表单?