異なる提出物間でデータを保持する自然な方法は、Datastoreを使用することです。
エクササイズのためにデータストアを使用したくない場合は、データをビューに渡して、各Web要求の間にあるhidden
個のフィールドを使用して読み込みます。
簡単に見てみましょうクイック&ダーティー例:整数を1つずつ合計するWebアプリケーションです。
template.render(path_to_the_view, template_values)
:
application.pyが
import os
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app
class Sum(webapp.RequestHandler):
def get(self):
path = os.path.join(os.path.dirname(__file__), 'index.html')
template_values = {"total":0}
self.response.out.write(template.render(path, template_values))
def post(self):
value = self.request.get("value")
total = self.request.get("total")
total = int(total) + int(value)
path = os.path.join(os.path.dirname(__file__), 'index.html')
template_values = {"value":value,
"total":total
}
self.response.out.write(template.render(path, template_values))
application = webapp.WSGIApplication(
[('/', Sum),
('/sum', Sum)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
index.html
ビューにデータを渡すために、template.render機能は、ビューに結果を運ぶ辞書変数を渡す使用されています
index.html
<html>
<body>
<form action="/sum" method="post">
<p>
<label for="value">Value to sum:
<input type="text" name="value"><br>
<input type="submit" value="Submit">
<input type="hidden" name="total" value="{{ total }}">
</p>
</form>
Last value submitted: {{ value }}| Total:{{ total }}
</body>
</html>
index.html
ビューは、結果を表示してhidden
フィールドを使用してコントローラに合計を返すために、辞書キーvalue
およびtotal
を使用します。ここ
とは結果である:
![enter image description here](https://i.stack.imgur.com/qbySR.png)
ああ!私はいくつかの質問があります。 1. 2つの異なるクラスでこれを行うことは可能でしょうか?私はあなたが2つのクラスを1つにまとめたことに気付きました... 2.データストアを使ってクラス間でやりとりする場合、どのように機能しますか?ユーザーAが1つの値、たとえば「3」を提出して提出した場合、合計は3になり、データストアにその値を格納するように見えます。その後、ユーザーBは4を提出し、期待通りに4の代わりに7を返します。ユーザーごとに固有のIDを保存する必要もありますか? – Jeremy
@Jeremy 1)はい - ハンドラクラスは問題ではありません。 2)それはまさにあなたがすでに見ているデモがすることです。 –
@jeremy 1.ニーズを満たす複数のクラスでコードを編成できます。それは本当に重要ではありません。 2.純粋な例でデータストアを使用したい場合は、ユーザーごとに区別する必要があります。 – systempuntoout