【问题标题】:Python AppEngine; get user info and post parameters?Python应用引擎;获取用户信息和发布参数?
【发布时间】:2009-05-30 20:48:40
【问题描述】:

我正在查看 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(如果他没有登录);然后带着他在帖子中的所有内容回来并实际发布。但是发生的事情是它甚至没有达到那个动作,因为帖子中什么都没有。 我知道我可以在会话中放一些东西并在留言簿的获取操作中检查它,但我想检查是否有人可以提出更好的解决方案!

谢谢

【问题讨论】:

    标签: python google-app-engine


    【解决方案1】:

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

    如果您不想将 POST 有效负载隐藏在某个地方(会话或其他),您可以通过将上面 sn-p 中的 def post 更改为 def get 来使您的代码正常工作,当然还有HTML 中的action="post" 写在示例的其他部分中,您没有剪断到action="get"。还有其他较小的解决方法(您可以接受post 来自登录用户的“正常”消息并将它们重定向到get,如果他们尚未登录,这可能会更简单),但我认为这个信息足以帮助您从这里继续,对吗?

    【讨论】:

    • 这个解决方案有几个相当大的警告:GETs 对于长数据来说是一个糟糕的选择,而且它们是幂等的。提交任何非幂等的内容(例如留言簿条目)都会引入 XSRF 问题。
    • @Nick,好点子——这就是为什么“在某处隐藏有效载荷”方法也值得考虑的原因(例如,每当数据可能很长,或者尽管“记录-in user" 接受 GET 的条件)。
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2013-03-26
    • 2013-02-24
    • 2018-03-26
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多