您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

一页中有两种形式的flask-bootstrap

一页中有两种形式的flask-bootstrap

用不同的名称定义这两个SubmitField,如下所示:

class Form1(Form):
    name = StringField('name')
    submit1 = SubmitField('submit')

class Form2(Form):
    name = StringField('name')
    submit2 = SubmitField('submit')

然后在view.py

....
form1 = Form1()
form2 = Form2()

if form1.submit1.data and form1.validate_on_submit():  # notice the order 
....
if form2.submit2.data and form2.validate_on_submit():  # notice the order 
....

如果您想深入了解它,请继续阅读。

这里是validate_on_submit()

    def validate_on_submit(self):
        """
        Checks if form has been submitted and if so runs validate. This is
        a shortcut, equivalent to ``form.is_submitted() and form.validate()``
        """
        return self.is_submitted() and self.validate()

这里是is_submitted()

    def is_submitted(self):
        """
        Checks if form has been submitted. The default case is if the HTTP
        method is **PUT** or **POST**.
        """

        return request and request.method in ("PUT", "POST")

调用form.validate_on_submit(),无论单击哪个提交按钮,它都会检查表单是否已通过HTTP方法提交。因此,上面的小技巧只是添加一个过滤器(以检查Submit是否具有数据,即form1.submit1.data)。

此外,我们更改了if的顺序,因此,当我们单击一个提交时, ,从而防止了两种表单的验证错误

故事还没有结束。这里是.data

@property
def data(self):
    return dict((name, f.data) for name, f in iteritems(self._fields))

它返回一个具有字段名(键)和字段数据(值)的字典,但是,

当我们单击第一个提交按钮(在form1中)时,来自的调用form1.submit1.data返回一个类似这样的字典:

temp = {'submit': True}

毫无疑问,当我们打电话时if form1.submit.data:,它会返回True

当我们单击第二个提交按钮(在form2中)时,对.datain的调用 *if form2.submit.data:

temp = {'submit': False, 'submit': True}

现在我们调用if form1.submit.data:True即使我们单击的提交按钮位于form2中,它也会返回。

这就是为什么我们需要SubmitField使用不同的名称来定义这两个。顺便说一句,感谢您的阅读(到这里)!

感谢您的通知,他添加一个有关的问题validate(),请检查以下评论

Python 2022/1/1 18:47:01 有349人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶