2014-03-07 110 views
1

我正在玩龍捲風。需要幫助。龍捲風模板沒有獲取current_user [「名稱」]的價值

現在我的瀏覽器有一個cookie設置爲id =「chatdemo_user」,其值爲「gaurav」。因此,當我點擊URL http://localhost:9999時,BaseHandler類中的get_current_user函數獲取用戶,但是當龍捲風呈現index.html模板時,出於某種原因,它不會獲得值current_user["name"],並且我得到錯誤TypeError: string indices must be integers, not str。有人可以幫我嗎?

TORNADO CODE

define("port", default=9999, help="run on the given port", type=int) 

class BaseHandler(tornado.web.RequestHandler): 
    def get_current_user(self): 
     user = self.get_cookie("chatdemo_user") 
     if not user: return None 
     return user 

class MainHandler(BaseHandler): 
    @tornado.web.authenticated 
    def get(self): 
     self.render("index.html") 

def main(): 
    parse_command_line() 
    app = tornado.web.Application(
     [ 
      (r"/", MainHandler), 
      ], 
    cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__", 
    login_url="http://localhost:8080/login", 
    template_path=os.path.join(os.path.dirname(__file__), "templates"), 
    static_path=os.path.join(os.path.dirname(__file__), "static"), 
    xsrf_cookies=True, 
    ) 
    app.listen(options.port) 
    tornado.ioloop.IOLoop.instance().start() 


if __name__ == "__main__": 
    main() 

模板

<html> 
<body> 
<b>{{ current_user["name"] }}</b> 
</body> 
</html> 

錯誤

[E 140307 17:03:09 web:1305] Uncaught exception GET/(10.19.122.127) 
HTTPRequest(protocol='http', host='localhost:9999', method='GET', uri='/', version='HTTP/1.1', remote_ip='10.19.122.127', headers={'Accept-Language': 'en-US,en;q=0.8', 'Accept-Encoding': 'gzip,deflate,sdch', 'Host': 'indlin1564:9999', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36', 'Connection': 'keep-alive', 'Cookie': 'csrftoken=zf1DA5uT5yNb0mcrWnP6poOCw02SB5ie; chatdemo_user=gaurav; sessionid=w06k4g7qwm9z98fp39rfscek6p5r3qwu', 'Cache-Control': 'max-age=0'}) 
Traceback (most recent call last): 
    File "/optusr1/aimsys/tools/gauravy/local/lib/python2.7/site-packages/tornado/web.py", line 1218, in _when_complete 
    callback() 
    File "/optusr1/aimsys/tools/gauravy/local/lib/python2.7/site-packages/tornado/web.py", line 1239, in _execute_method 
    self._when_complete(method(*self.path_args, **self.path_kwargs), 
    File "/optusr1/aimsys/tools/gauravy/local/lib/python2.7/site-packages/tornado/web.py", line 2395, in wrapper 
    return method(self, *args, **kwargs) 
    File "./chatdemo.py", line 81, in get 
    self.render("index.html") 
    File "/optusr1/aimsys/tools/gauravy/local/lib/python2.7/site-packages/tornado/web.py", line 615, in render 
    html = self.render_string(template_name, **kwargs) 
    File "/optusr1/aimsys/tools/gauravy/local/lib/python2.7/site-packages/tornado/web.py", line 722, in render_string 
    return t.generate(**namespace) 
    File "/optusr1/aimsys/tools/gauravy/local/lib/python2.7/site-packages/tornado/template.py", line 278, in generate 
    return execute() 
    File "index_html.generated.py", line 11, in _tt_execute 
    _tt_tmp = current_user["name"] # index.html:3 
TypeError: string indices must be integers, not str 
+0

'current_user'是一個字符串。你爲什麼期望它是一個帶有「name」鍵的字典? – geoffspear

回答

2

更換current_user["name"]與簡單current_user在您的模板。從get_current_user返回的current_user值是一個字符串。

0

最好的辦法就是解碼餅乾

def get_current_user(self): 
    user_json = self.get_secure_cookie("chatdemo_user") 
    if user_json: 
     return tornado.escape.json_decode(user_json) 
    else: 
     return None