def form_generator(current_user):
class web_form:
user_email = StringFiled('Email', validators=[Email()])
def validate_user_email(self, field)
if Model.query.filter(field.data == current_user.email).first()
return
else:
return ValidationError("Email is not current user's")
return web_form()
class MyForm(flask_wtf.FlaskForm):
user_id_field = wtforms.StringField("User ID")
def __init__(self, valid_user_id, **kwargs):
super().__init__(**kwargs)
self.valid_user_id = valid_user_id
def validate_user_id_field(self, field):
"""
Function name must be 'validate_' + name of field you want to validate
"""
if field.data != self.valid_user_id
raise wtforms.validators.ValidationError("Wrong user id!")
# In endpoint definition:
my_form = MyForm(formdata=flask.request.form, valid_user_id=flask_login.current_user.id)
my_form.validate()
你试过做下面这样的事情吗?我不知道它是否有效,但它允许您在运行时定义一个静态类,并将当前的“用户”作为参数传递给该类从全局范围继承而不发生变化的参数。在
在您的烧瓶路线中,请尝试:
^{pr2}$抱歉,这是未经测试,我只是看到它和张贴了回应。但是如果你尝试了,让我知道它是否成功,或者更有趣的是为什么它失败了!!在
我还没有找到在运行时设置验证器的方法,但是有一种方法可以为窗体类上的字段定义一个验证函数,该函数可以基于构造时传递给窗体的数据。下面是一个例子
编辑
哈,事实证明在运行时设置验证器非常简单,只是文档中没有提到它。在
如果您有一个带有字段
^{pr2}$some_field
的表单,您可以在表单的构造函数中设置self.some_field.validators = [...]
,例如也可以直接在端点处理程序中设置验证器:
相关问题 更多 >
编程相关推荐