如何在web2py中允许多个表单提交?

时间:2016-03-20 00:12:35

标签: python forms python-2.7 web2py

感谢web2py使用隐藏的_formkey值自动阻止多个表单提交。在大多数情况下,提交表单时会再次加载页面,以便生成新密钥。但是,由于我使用web2py的ajax函数提交表单,因此我在不刷新页面的情况下获得结果,因此表单键保持不变,以后无法提交。

我该如何处理这种情况?

1 个答案:

答案 0 :(得分:2)

您可以考虑为表单创建单独的操作,并通过Ajax组件将整个表单加载到页面中:

def index():
    form_component = LOAD('default', 'form.load', ajax=True)
    return dict(form_component=form_component)

def form():
    form = FORM(...).process()
    return dict(form=form)

在index.html视图中,您将通过{{=form_component}}包含该组件,并在form.load视图中,您将通过{{=form}}包含表单本身(注意,form.load视图不应该扩展布局,因为它最终将通过Ajax插入到index.html页面中。

现在整个表单将通过Ajax加载,它将自动通过Ajax提交,同时通过Ajax返回一个新表单(所以你根本不需要编写任何Javascript代码)。

或者,如果您想坚持使用当前的方法,可以让控制器返回整个表单以响应Ajax请求,并将ajax()函数的目标参数设置为div的id包含表格。在这种情况下,完成Ajax请求后,整个表单将被一个新表单(将有一个新的_formkey)替换。