2

Pythonを使用してGoogleAppEngineでオンライン入札システムを開発しています。post-redirect-getメカニズムに関しては、私はしばらくグーグルしてきましたが、それをどのように実装するかについてはまだ明確な考えがありません。仮定する:

HTML:

<form action="/test" method="post">
  ...
  <input type="submit" value="Submit" />
</form>

Python:

# Collect data from the posted form
...
# Save data into datastore
...
# Prepare template values

tempalteValues = { ... }
path = os.path.join(os.path.dirname(__file__), 'templates/', 'responseMessage.html')
handler.response.out.write(template.render(path, templateValues))

# Then what?

2つの質問があります:

1)応答メッセージファイルをレンダリングした後、次に何をすべきですか?つまり、「GET」を実装する方法は?

2)私が考えることができる別の戦略は次のとおりです:投稿が1回だけ発生することになっている場合(たとえば、一意の注文番号で製品を購入する場合)、フォームが送信されたことを示すフラグと次の投稿をエンティティに設定できますか?フラグが設定されている場合は無視されますか?これは実行可能ですか、それとも正しいですか?

(注:注文番号はシステムによって生成されるため、その番号を取得するには、フォームを送信する前にエンティティを保存する必要があります)

前もって感謝します。

4

1 に答える 1

2

あなたが探しているのは、次のようなRestfulサービスを構築することです。

class BiddingHandler(webapp2.RequestHandler):
    def get(self):
        #Get code goes here for this handler

    def post(self):
        #code that gets your posted data and processes it

    def delete(self):
        #code to delete something

app = webapp2.WSGIApplication([('/bidding', BiddingHandler)])

上記を見て、テンプレートをレンダリングする代わりに投稿の最後の行に投稿を行った後にリダイレクトを実行したい場合は、次の行でユーザーをハンドラーのget部分にリダイレクトするだけです。

self.response.redirect('/bidding')

上で示したのは、それを実装する正しい方法です。データストアに書き込み、リクエストごとにデータストアから読み取ると、オーバーヘッドとコストが増加します。

于 2013-03-11T11:17:05.543 に答える