2010-04-07 44 views
1

我有一个简单的GAE应用程序,包括登录/注销链接。此应用正在dev服务器上运行。谷歌应用程序引擎:与用户API的困难(或者可能只是一个Python语法问题)

基页处理程序获取当前用户,并适当地创建登录/注销url。然后它将这些信息放入一个_template_data字典中,以方便子类。

​​

这里就是这样的一个子类:

class MainPage(BasePage): 
    def get(self): 
     self.render('start', self._template_data) 

登录/注销链接显示的罚款,并要正确devserver登录/注销页面。但是,它似乎没有效果 - 服务器似乎仍认为用户已注销。我在这里做错了什么?

回答

2

我相信问题是_user属性。

目前,_user属性在包含该类的模块被导入时(可能在应用程序启动时)被绑定。您需要为每个请求获取当前用户。

我会改写成类似:

class BasePage(webapp.RequestHandler): 
    def render(self, template_name, data={}): 
     template_data = {} 
     user = template_data["user"] = users.get_current_user() 
     template_data["login_logout_link"] = users.create_logout_url() if user else users.create_login_url() 
     template_data.update(data) 
     path = os.path.join(os.path.dirname(__file__), 'Static', 'Templates', '%s.html' % template_name) 
     self.response.out.write(template.render(path, template_data) 

模板然后就会让userlogin_logout_link在发给在子类中的值,您可以通过额外的值来使用数据参数中的模板(template_data.update(data)使用data字典中的键/值对更新template_data字典)。

子类例如:

class MainPage(BasePage): 
    def get(self): 
     self.render('start', data={"now": datetime.now()}) 
+0

的确。这工作。谢谢。 – 2010-04-07 19:16:43

相关问题