Python AppEngine;获取用户信息和发布参数?

时间:2009-05-30 20:48:41

标签: python google-app-engine

我查看google给出的示例如何开始使用python;特别是这里发布的代码; http://code.google.com/appengine/docs/python/gettingstarted/usingdatastore.html

我想要倾斜的是,在这里:

class Guestbook(webapp.RequestHandler):
  def post(self):
    greeting = Greeting()

    if users.get_current_user():
      greeting.author = users.get_current_user()

    greeting.content = self.request.get('content')
    greeting.put()
    self.redirect('/')

他们正在保存评论,如果用户登录,我们保存用户;如果不是它的空,当我们从数据库中取出它时,我们实际上在这里检查:

  if greeting.author:
    self.response.out.write('<b>%s</b> wrote:' % greeting.author.nickname())
  else:
    self.response.out.write('An anonymous person wrote:')

所以我想要的是使用User对象来获取信息,如下所示:

class Guestbook(webapp.RequestHandler):
    def post(self):
        user = users.get_current_user()
        if user:
            greeting = Greeting()
        if users.get_current_user():
            greeting.author = users.get_current_user()
            greeting.content = self.request.get('content')
            greeting.put()
            self.redirect('/')
        else:
            self.redirect(users.create_login_url(self.request.uri))

所以,我想用该代码做的是将用户发送到登录URL(如果他没有登录);然后用他在帖子中发布的任何东西回来并实际发布它。但是发生的事情是,它甚至没有达到那个动作因为这篇文章中没有任何内容。 我知道我可以在会话中加入一些东西并在留言簿的get动作中检查它,但我想检查是否有人能想出更好的解决方案!

由于

1 个答案:

答案 0 :(得分:3)

问题是,self.redirect无法“携带”POST HTTP请求的有效负载,因此(从post方法)重定向到login-url&amp; c会出现行为异常(实际上我相信登录网址会在完成后继续使用get继续,并且无法让它改为post

如果您不希望将POST有效负载存放在某个地方(会话或其他地方),则可以通过将上面的代码段中的def post更改为def get来使代码生效当然,在示例的其他部分中写入的HTML中的action="post",您还没有剪切到action="get"。还有其他一些小的解决方法(您可以接受post来自登录用户的“正常”消息,并将它们重定向到get,如果他们还没有登录,可能会做更简单的事情,但是我认为这些信息足以帮助您从这里继续,对吗?