我有一个相当简单的web2py表单,在其字段上有一些验证器,如IS_FLOAT_IN_RANGE(...)。当我尝试提交表单时,如果表单中包含未通过验证的字段,则表单将无法通过第一次验证,但不会报告存在任何错误。如果我然后重新提交相同的表单,验证将再次失败。
更糟糕的是,如果我提交有效信息,除非我两次提交相同的表格,否则不会提交。视图只是{{=form}}
控制器如下所示:
@auth.requires_login()
def addpipelines():
form = FORM(INPUT(_name="type", _value="insert", _type="hidden"),
INPUT(_name="project", _value="Project", requires=IS_NOT_EMPTY()),
INPUT(_name="value", _value="Value", requires=IS_FLOAT_IN_RANGE(-1e100, 1e100)),
BR(), BR(),
INPUT(_type="submit", _value="Add"),
_method="POST")
if request.post_vars.type == "insert" and form.process().accepted:
request.post_vars["blub"] = "blargh"
return dict(form=form)
```
答案 0 :(得分:3)
if request.post_vars.type == "insert" and form.process().accepted:
注意,在Python中,当and
之前的部分为false时,and
之后的上述表达式的部分将不会被评估,因此form.process()
只会在表格已提交。但是,为了使表单处理正常工作,首次创建表单时也必须调用form.process()
(因为它添加了一个隐藏的_formkey字段,并使用放置在会话中的formkey副本检查其值以保护反对CSRF攻击和双重提交)。相反,尝试切换条件的顺序:
if form.process().accepted and request.post_vars.type == "insert":