1

web2pyでコントローラーとフォームがどのように機能するかについて質問があります。次のコントローラー関数(we2pyブックから)を検討してください。

def display_form():
form=FORM('Your name:',
          INPUT(_name='name', requires=IS_NOT_EMPTY()),
          INPUT(_type='submit'))
if form.accepts(request,session):
    response.flash = 'form accepted'
elif form.errors:
    response.flash = 'form has errors'
else:
    response.flash = 'please fill the form'
return dict(form=form)

この機能には2つの目標があります。1つはフォームを返すこと、もう1つは送信ボタンで何をするかを指示することです。どうしてそれができるのか理解できません。2回呼ばれていますか?ビューがフォームとは何かを知る必要があるときと、送信ボタンが押されたときの2回目は?直感的にこの作品:

if form.accepts(request,session):
    response.flash = 'form accepted'
elif form.errors:
    response.flash = 'form has errors'
else:
    response.flash = 'please fill the form'

後処理を担当するいくつかの異なる機能にある必要があります。

それはどのように機能しますか?

4

1 に答える 1

5

はい、関数は2回呼び出されます。フォーム値を投稿せずにその関数のURLが呼び出されると、form.accepts()データが送信されていないため、関数は失敗します(つまり、Falseを返します)。その場合、返されるのは新しい空白のフォームだけです。ユーザーが最終的にフォームを送信すると、フォームの値が同じ関数に送信されます。その場合、form.accepts()投稿されたフォームデータをで検索しrequest.post_varsます。次に、データを検証し、検証に合格するとTrueを返し、response.flash「formaccepted」に設定されます。

これは、ポストバックまたは自己提出と呼ばれます。詳細については、こちらをご覧ください

于 2013-01-30T20:06:59.693 に答える