Google App Engine:用户API行为奇怪

时间:2010-03-09 03:22:06

标签: python django google-app-engine

我认为我错误地使用了用户API:

class BaseHandler(webapp.RequestHandler):
   user = users.get_current_user()

   def header(self, title):
     if self.user:
        render('Views/link.html', self, {'text': 'Log out', 'href': users.create_logout_url('/')})
     else:
        render('Views/link.html', self, {'text': 'Log in', 'href': users.create_login_url('/')})

link.html

<p>
    <a href="{{href}}">{{text}}</a>
</p>

有时它会起作用,有时却不起作用。我会连续10次点击“退出”链接,然后重新加载页面,它会将我重定向到'/'页面。然后,神秘地,有一次我将被退出。登录失败的方式基本相同。这是怎么回事?

解决了 - 这有效:

class BaseHandler(webapp.RequestHandler):

    def __init__(self):
        self.user = users.get_current_user()

    def header(self, title):
        if self.user:
            render('Views/message.html', self, {'msg': "Welcome, %s" % self.user.nickname()})
            render('Views/link.html', self, {'text': 'Log out', 'href': users.create_logout_url('/')})
        else:
            render('Views/link.html', self, {'text': 'Log in', 'href': users.create_login_url('/')})

看起来我可以通过在函数中将它们称为self.var_name来拥有实例变量,但从不在类级别上声明它们。奇

1 个答案:

答案 0 :(得分:1)

您将users.get_current_user()的结果存储在名为user的变量中,但您的if会检查self.user的值,该值不是同一个变量。< / p>

使用相同的变量名称,一切都应该没问题!