0

我有一个相当简单的 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)

```

4

1 回答 1

3
if request.post_vars.type == "insert" and form.process().accepted:

注意,在 Python 中,当前面的部分为假时,上面表达式后面的and部分不会被计算,所以只会在提交表单时被调用。但是,要使表单处理正常工作,还必须在首次创建表单时调用(因为它添加了一个隐藏的 _formkey 字段并使用放置在会话中的表单密钥副本检查其值,以防止 CSRF 攻击和双重提交)。相反,请尝试切换条件的顺序:andform.process()form.process()

if form.process().accepted and request.post_vars.type == "insert":
于 2012-07-02T22:38:53.780 回答