>æäº²ç±çå¼å 们ï¼è¿æ¯ä½ 们æç¥éçãä½ä½ 们个人è¦å¿«å¿«å°å¬ï¼æ ¢æ ¢å°è¯´ï¼æ ¢æ ¢å°å¨æï¼å ä¸ºäººçææ°å¹¶ä¸æå°±ç¥çä¹ãæä»¥ï¼ä½ 们è¦è±å»ä¸åçæ±¡ç§½åçä½çéªæ¶ï¼å温æçå¿é¢åé£ææ ½ç§çéï¼å°±æ¯è½æä½ 们çµéçéã(JAMES 1:19-21) #ç¨tornadoåç½ç«(6) å¨[ä¸ä¸è](./307.md)ä¸å·²ç»å¯¹å®å ¨é®é¢è¿è¡äºæè¿°ï¼å¦å¤ä¸ä¸ªå 容æ¯ä¸è½å¿½ç¥çï¼é£å°±æ¯ç¨æ·ç»å½ä¹åï¼å¯¹å½åç¨æ·ç¶æï¼ç¨æ·æ¯å¦ç»å½ï¼è¿è¡å¤æã ##ç¨æ·éªè¯ ç¨æ·ç»å½ä¹åï¼å½ç¿»å°å«çç®å½ä¸æ¶ï¼å¾å¾éè¦éªè¯ç¨æ·æ¯å¦å¤äºç»å½ç¶æãå½ç¶ï¼ä¸ç§æ¯è¾ç´æ¥çæ¹æ³ï¼å°±æ¯å¨è½¬å°æ¯ä¸ªç®å½æ¶ï¼é½ä»cookieä¸æç¨æ·ä¿¡æ¯ï¼ç¶åä¼ å°å端ï¼è·æ°æ®åºéªè¯ãè¿ä¸ä» æ¯ç´æ¥çï¼ä¹æ¯åºæ¬çæµç¨ã使¯ï¼è¿ä¸ªè¿ç¨å¦ææ»è®©ç¨æ·èªå·±æ¥åï¼æ¡æ¶çä½ç¨å°±æ¾ä¸åºæ¥äºãtornadoå°±æä¾äºä¸ç§ç¨æ·éªè¯æ¹æ³ã 为äºå颿´å·¥ç¨åå°ä½¿ç¨tornadoç¼ç¨ãéè¦å°åé¢çå·²ç»æç代ç è¿è¡éæ°æ¢³çãæåªæ¯å°æä¿®æ¹çæä»¶ä»£ç ååºæ¥ï¼ä¸åè¿å¤è§£éï¼å¿ è¦çææ³¨éï¼ç¸ä¿¡è¯»è å¨åè¿°å¦ä¹ åºç¡ä¸ï¼è½å¤çè§£ã å¨handlerç®å½ä¸å¢å ä¸ä¸ªæä»¶ï¼åç§°æ¯base.pyï¼ä»£ç å¦ä¸ï¼ #! /usr/bin/env python # coding=utf-8 import tornado.web class BaseHandler(tornado.web.RequestHandler): def get_current_user(self): return self.get_secure_cookie("user") å¨è¿ä¸ªæä»¶ä¸ï¼ç®ååªåä¸ä¸ªäºæ ï¼å°±æ¯å»ºç«ä¸ä¸ªå为BaseHandlerçç±»ï¼ç¶åå¨é颿¾ç½®ä¸ä¸ªæ¹æ³ï¼å°±æ¯å¾å°å½åçcookieãå¨è¿éç¹å«è¦å读è 说æï¼å¨è¿ä¸ªç±»ä¸ï¼å ¶å®è¿å¯ä»¥åä¸å°å«çä¸è¥¿ï¼æ¯å¦ä½ å°±å¯ä»¥å°æ°æ®åºè¿æ¥åå°è¿ä¸ªç±»çåå§å`__init__()`æ¹æ³ä¸ãå 为å¨å ¶å®çç±»ä¸ï¼æä»¬è¦ç»§æ¿è¿ä¸ªç±»ãæä»¥ï¼è¿æ ·ä¸ä¸ªæ¶å¿ï¼å°±ä¸ºè¯»è 以åçæ©å±å¢å äºåä½ç©ºé´ã ç¶åæindex.pyæä»¶æ¹åä¸ºï¼ #!/usr/bin/env python # coding=utf-8 import tornado.escape import methods.readdb as mrd from base import BaseHandler class IndexHandler(BaseHandler): #ç»§æ¿base.pyä¸çç±»BaseHandler def get(self): usernames = mrd.select_columns(table="users",column="username") one_user = usernames[0][0] self.render("index.html", user=one_user) def post(self): username = self.get_argument("username") password = self.get_argument("password") user_infos = mrd.select_table(table="users",column="*",condition="username",value=username) if user_infos: db_pwd = user_infos[0][2] if db_pwd == password: self.set_current_user(username) #å°å½åç¨æ·ååå ¥cookieï¼æ¹æ³è§ä¸é¢ self.write(username) else: self.write("-1") else: self.write("-1") def set_current_user(self, user): if user: self.set_secure_cookie('user', tornado.escape.json_encode(user)) #注æè¿é使ç¨äºtornado.escape.json_encode()æ¹æ³ else: self.clear_cookie("user") class ErrorHandler(BaseHandler): #å¢å äºä¸ä¸ªä¸é¨ç¨æ¥æ¾ç¤ºé误çé¡µé¢ def get(self): #使¯åé¢ä¸åç¬è®²è¿°ï¼è¯»è å¯ä»¥ä»æºç ä¸çè§£ self.render("error.html") å¨index.pyçç±»IndexHandlerä¸ï¼ç»§æ¿äºBaseHandlerç±»ï¼å¹¶ä¸å¢å äºä¸ä¸ªæ¹æ³set_current_user()ç¨äºå°ç¨æ·ååå ¥cookieã请读è ç¹å«æ³¨æé£ä¸ªtornado.escape.json_encode()æ¹æ³ï¼å ¶åè½æ¯ï¼ >tornado.escape.json_encode(value) > JSON-encodes the given Python object. å¦æè¦æ¥çæºç ï¼å¯ä»¥é 读ï¼[http://www.tornadoweb.org/en/branch2.3/escape.html](http://www.tornadoweb.org/en/branch2.3/escape.html) è¿æ ·åçæ¬è´¨æ¯æuser转å为jsonï¼åå ¥å°äºcookieä¸ã妿ä»cookie䏿å®è¯»åºæ¥ï¼ä½¿ç¨userç弿¶ï¼è¿ä¼ç¨å°ï¼ >tornado.escape.json_decode(value) > Returns Python objects for the given JSON string å®ä»¬ä¸[json模åä¸çdump()ãload()](./227.md)åè½ç¸ä»¿ã æ¥ä¸æ¥è¦å¯¹user.pyæä»¶ä¹è¿è¡éåï¼ #!/usr/bin/env python # coding=utf-8 import tornado.web import tornado.escape import methods.readdb as mrd from base import BaseHandler class UserHandler(BaseHandler): @tornado.web.authenticated def get(self): #username = self.get_argument("user") username = tornado.escape.json_decode(self.current_user) user_infos = mrd.select_table(table="users",column="*",condition="username",value=username) self.render("user.html", users = user_infos) å¨get()æ¹æ³å颿·»å `@tornado.web.authenticated`ï¼è¿æ¯ä¸ä¸ªè£ 饰å¨ï¼å®çä½ç¨å°±æ¯å®ætornadoç认è¯åè½ï¼å³è½å¤å¾å°å½ååæ³ç¨æ·ãå¨åæ¥ç代ç ä¸ï¼ç¨`username = self.get_argument("user")`æ¹æ³ï¼ä»urlä¸å¾å°å½åç¨æ·åï¼ç°å¨æå®æ³¨éæï¼æ¹ç¨`self.current_user`ï¼è¿æ¯ååé¢çè£ é¥°å¨é å使ç¨çï¼å¦æå®çå¼ä¸ºåï¼å°±æ ¹æ®settingä¸ç设置ï¼å¯»æ¾login_urlææå®çç®å½ï¼è¯·å ³æ³¨ä¸é¢å¯¹settingçé ç½®ï¼ã ç±äºå¨index.pyæä»¶çset_current_user()æ¹æ³ä¸ï¼æ¯å°userå¼è½¬å为jsonåå ¥cookieçï¼è¿éå°±å¾ç¨`username = tornado.escape.json_decode(self.current_user)`è§£ç ãå¾å°çusernameå¼ï¼å¯ä»¥è¢«ç¨äºåä¸å¥ä¸çæ°æ®åºæ¥è¯¢ã application.pyä¸çsettingä¹è¦åç¸åºä¿®æ¹ï¼ #!/usr/bin/env python # coding=utf-8 from url import url import tornado.web import os setting = dict( template_path = os.path.join(os.path.dirname(__file__), "templates"), static_path = os.path.join(os.path.dirname(__file__), "statics"), cookie_secret = "bZJc2sWbQLKos6GkHn/VB9oXwQt8S0R0kRvJ5/xJ89E=", xsrf_cookies = True, login_url = '/', ) application = tornado.web.Application( handlers = url, **setting ) ä¸ä»¥å代ç çéè¦åºå«å¨äº`login_url = '/',`ï¼å¦æç¨æ·ä¸åæ³ï¼æ ¹æ®è¿ä¸ªè®¾ç½®ï¼ä¼è¿åå°é¦é¡µãå½ç¶ï¼å¦ææåç¬çç»å½çé¢ï¼æ¯å¦æ¯`/login`ï¼ä¹å¯ä»¥`login_url = '/login'`ã 妿¤å®æçæ¯ç¨æ·ç»å½å°ç½ç«ä¹åï¼å¨é¡µé¢è½¬æ¢çæ¶åå®ç°ç¨æ·è®¤è¯ã ä¸ºäºæ¼ç¤ºæ¬èçææï¼æå¯¹æç¨çæºç è¿è¡ä¿®æ¹ã读è å¨é è¯»çæ¶åï¼å¯ä»¥åç §æºç ã ------ [æ»ç®å½](./index.md) | [ä¸èï¼ç¨tornadoåç½ç«(5)](./307.md) | [ä¸èï¼ç¨tornadoåç½ç«(7)](./309.md) å¦æä½ è®¤ä¸ºæå¿ è¦æèµæï¼è¯·éè¿æ¯ä»å®ï¼**[email protected]**,ä¸èææ¿ã