2

我正在使用 Python 在 Google App Engine 上开发一个在线竞价系统。关于 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?

我有两个问题:

1) 渲染响应消息文件后,接下来应该做什么?也就是说,如何实现'GET'?

2)我能想到的另一种策略是:如果帖子应该只发生一次(例如,具有唯一订单号的产品购买),我可以在实体中设置一个标志,指示表单已提交以及以下帖子如果设置了标志将被忽略?这是可行的,甚至是正确的吗?

(注意:由于订单号是系统生成的,所以在提交表单之前必须先保存实体才能得到该号)

提前致谢。

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 回答