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