如何在Flask中使用当前用户有效

2024-04-20 13:56:39 发布

您现在位置:Python中文网/ 问答频道 /正文

是否有方法在自定义字段验证器中访问当前用户。这就好像在系统设置时没有用户而不是在会话调用期间实例化了验证器。在

谢谢!在


Tags: 实例方法用户系统
2条回答

你试过做下面这样的事情吗?我不知道它是否有效,但它允许您在运行时定义一个静态类,并将当前的“用户”作为参数传递给该类从全局范围继承而不发生变化的参数。在

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()

在您的烧瓶路线中,请尝试:

^{pr2}$

抱歉,这是未经测试,我只是看到它和张贴了回应。但是如果你尝试了,让我知道它是否成功,或者更有趣的是为什么它失败了!!在

我还没有找到在运行时设置验证器的方法,但是有一种方法可以为窗体类上的字段定义一个验证函数,该函数可以基于构造时传递给窗体的数据。下面是一个例子

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()

编辑

哈,事实证明在运行时设置验证器非常简单,只是文档中没有提到它。在

如果您有一个带有字段some_field的表单,您可以在表单的构造函数中设置self.some_field.validators = [...],例如

^{pr2}$

也可以直接在端点处理程序中设置验证器:

form = MyForm(formdata=flask.request.form)
form.some_field.validators = [MyValidator(some_data)]

相关问题 更多 >