在不同提交之间持久保存数据的自然方法是使用Datastore。
如果出于练习目的,您不想使用数据存储,则必须将数据传递给视图并在每个 Web 请求之间使用一些 hidden 字段将其读回。
让我们看一个简单的 quick&dirty 示例:一个将整数一个一个求和的网络应用程序。
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 函数将一个字典变量传递给视图:
template.render(path_to_the_view, template_values)
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 视图使用字典键 value 和 total 显示结果并使用 hidden 字段将总数提交回控制器。
结果如下: