2013-03-04 92 views
2

我正在用Google在Google App Engine上开发在线出价系统。关于post-redirect-get机制,我一直在使用googling,但仍然没有清楚如何实现它。假设:如何在Python App中实现Post-redirect-get Google App Engine?

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)我能想到的另一个策略是:如果帖子应该只发生一次(例如,具有唯一订单号的产品购买),我可以在实体中设置一个标志,表明表单已提交如果标志被设置,以下帖子将被忽略?这是可行的还是正确的?

(注:因为是由系统生成的订单号,实体必须为了得到这个数字的形式提交前保存)

在此先感谢。

回答

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') 

我已经向您展示上面来实现它的正确方法。写入数据存储并从中读取每个请求将意味着更多的开销和成本。

+0

嘿,我没有想到这样一个简单的解决方案。非常好,谢谢一百万,Tkingovr。 – 2013-03-12 03:08:51

+0

同样在这里,我遇到了同一个问题,并不相信这是简单的高兴,我可以帮忙! – Tkingovr 2013-03-12 08:51:21

+0

我在post-redirect-get路径中没有问题,但在delete-redirect-get路径中遇到问题。删除过程完成后,我只是self.rediret_to('my-handler-name')就像在我的post方法中,但我得到的是另一个删除而不是get。 (意思是delete-redirect-delete而不是delete-redirect-get)你遇到过类似的情况吗? – 2013-07-26 13:39:40