Python AppEngine; 获取用户信息和发布参数?
我在查看谷歌提供的关于如何开始使用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))
我希望用这段代码来做的是,如果用户没有登录,就把他引导到登录页面;然后再让他回来,带着他之前填写的内容进行发布。但是现在的问题是,因为在提交的内容中什么都没有,所以根本没有达到这个操作。我知道我可以在会话中放一些东西,然后在留言簿的获取操作中检查它,但我想看看有没有人能想出更好的解决方案!
谢谢
1 个回答
3
问题是,self.redirect
不能“带着”一个 POST
请求的内容,所以从 post
方法进行重定向到登录网址时会出现问题(实际上,我认为登录网址会在完成后使用 get
方法继续,而没有办法让它使用 post
方法)。
如果你不想把那个 POST
请求的内容存放在某个地方(比如会话或其他方式),你可以通过把你上面代码中的 def post
改成 def get
来让代码正常工作,当然,HTML中其他部分的 action="post"
也要改成 action="get"
。还有其他一些小的变通方法(比如你可以接受登录用户的 post
请求,然后把他们重定向到一个 get
方法,这个方法可以做一些更简单的事情,如果他们还没有登录的话),但我觉得这些信息已经足够帮助你继续了,对吧?