0

私はかなり単純なweb2pyフォームを持っており、そのフィールドにIS_FLOAT_IN_RANGE(...)のようないくつかのバリデーターがあります。検証に合格しないフィールドがあるときにフォームを送信しようとすると、フォームは最初の検証に失敗しますが、エラーがあったことは報告されません。その後、同じフォームを再送信すると、検証はもう一度失敗します。

さらに悪いことに、有効な情報を送信すると、同じフォームを2回送信しないと送信されません。ビューは単純です{{=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 では、上記の式の の前の部分が falseandの場合は評価されないため、フォームが送信されたときにのみ呼び出されることに注意してください。ただし、フォーム処理が適切に機能するためには、フォームが最初に作成されたときにも呼び出す必要があります (非表示の _formkey フィールドを追加し、CSRF 攻撃と二重攻撃から保護するために、セッションに配置されたフォームキーのコピーでその値をチェックするため)提出)。代わりに、条件の順序を入れ替えてみてください。andform.process()form.process()

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