2013-02-24 41 views
1

我试图数据库查询保存到一个cookie,因为我需要在每一页上的结果。当硬编码的到期最新到代码一切正常,但是当我更换一个动态的“第二天”期满硬编码的日期,它给我以下错误:GAE的Python - 保存数据库查询到的cookie

self.response.headers.add_header(str('Set-Cookie'), str('shops=%s; path=/; expires=%s') % shoplist expire_string) 
                              ^
SyntaxError: invalid syntax 

我也试图用response.set_cookie方法,但为什么我决定用下面的代码去这并不能在所有的工作,那就是:

class CookieHandler(webapp2.RequestHandler): 
    def get(self): 
     shoplist = Shop.all().filter('active = ', True).order('abbrev') 
     expire_date = datetime.datetime.now() + datetime.timedelta(days=1) 
     expire_string = expire_date.strftime('%a, %d %b %Y %H:%M:%S GMT') 
     self.response.headers.add_header(str('Set-Cookie'), str('shops=%s; path=/; expires=%s') % shoplist expire_string) 

UPDATE 给出有关内容的一些详细信息 - 它是数据库中所有商店名称的查询。该查询用于每个页面上都可见的搜索框上的自动完成功能。

+2

你一定要明白,有人可能只是修改了cookie,并获得完全控制你的数据库,对不对? – 2013-02-24 14:49:20

+0

真的吗?结果仅用于填充自动完成功能,然后必须重新查询数据库。我不知道那里有这样的风险。这将如何工作? – Vincent 2013-02-24 15:06:11

+0

什么是不具有浏览器的每一次新的页面加载查询数据库的最佳做法? – Vincent 2013-02-24 15:09:53

回答

2

你的语法错误发生的事情,因为“%”运营商期望的元组在它的右边,所以你的代码行应该是:

self.response.headers.add_header(str('Set-Cookie'), str('shops=%s; path=/; expires=%s') % (shoplist, expire_string)) 

注意额外的括号和逗号。

+1

谢谢杰西,它解决了错误!现在我需要做的是找出是否这实际上是这样做的最好的方式.. – Vincent 2013-02-24 15:12:10

+0

@Vincent你可以只是店的名单,在一个单独的URL,(在JSON,说的),然后设置一个较大的到期在该URL的响应标题中添加时间。浏览器将首次获取它,然后可能不会再次到期。 – 2013-02-24 15:13:56

+0

这听起来也是一个很好的解决方案。谢谢! – Vincent 2013-02-24 15:15:36