>ä½ ä»¬ä¸è¦è¢«é£è¯¸è¬æªå¼çæè®å¾å¼äºå»ãå 为人å¿é æ©å¾ååºææ¯å¥½çï¼å¹¶ä¸æ¯é 饮é£ï¼é£å¨é¥®é£ä¸ä¸å¿çï¼ä»æ¥æ²¡æå¾ççå¤ã(HEBREWS 13:9) #ç¨tornadoåç½ç«(2) æ¢ç¶æå¥½äºä¸ä¸ªç½ç«çæ¶å¿ï¼ä¸é¢å°±å¯ä»¥åéé¢å¡«å 容ã ##è¿æ¥æ°æ®åº è¦åçç½ç«ï¼ææ°æ®åºæ¯æï¼è½ç¶è¿ä¸æ¯å¿ é¡»çï¼ä½æ¯å¦æåä¸ä¸ªåè½å¼ºæçç½ç«ï¼æ°æ®åºå°±æ¯å¿ é¡»çäºã æ¥ä¸æ¥çç½ç«ï¼ææä¸éç¨mysqlæ°æ®åºã æä¹è¿æ¥mysqlæ°æ®å¢ï¼å ¶æ¹æ³è·[ãmysqlæ°æ®åº(1)ã](./230.md)ä¸çæ¹æ³å®å ¨ä¸è´ã为äºç®åï¼æä¹ä¸æ°å»ºæ°æ®åºäºï¼å°±å©ç¨å·²ç»æçé£ä¸ªæ°æ®åºã å¨ä¸ä¸èä¸å·²ç»å»ºç«çæä»¶å¤¹methodsä¸å»ºç«ä¸ä¸ªæä»¶db.pyï¼å¹¶ä¸åè[ãmysqlæ°æ®åº(1)ã](./230.md)å[ãmysqlæ°æ®åº(2)ã](./231.md)çå 容ï¼åå«å»ºç«èµ·è¿æ¥å¯¹è±¡å游æ 对象ã代ç å¦ä¸ï¼ #!/usr/bin/env python # coding=utf-8 import MySQLdb conn = MySQLdb.connect(host="localhost", user="root", passwd="123123", db="qiwsirtest", port=3306, charset="utf8") #è¿æ¥å¯¹è±¡ cur = conn.cursor() #游æ 对象 ##ç¨æ·ç»å½ ###å端 å¾å¤ç½ç«ä¸é½çå°ç¨æ·ç»å½åè½ï¼è¿éåä¸ä¸ªç®åçç»å½ï¼å ¶åè½æè¿°ä¸ºï¼ >å½ç¨æ·è¾å ¥ç½åï¼åç°å¨ç¼åçæ¯ä¸ä¸ªç»å½çé¢ãå¨ç¨æ·ååå¯ç 两个è¾å ¥æ¡ä¸åå«è¾å ¥äºæ£ç¡®çç¨æ·ååå¯ç ä¹åï¼ç¹å»ç¡®å®æé®ï¼ç»å½ç½ç«ï¼æ¾ç¤ºå¯¹è¯¥ç¨æ·ç欢è¿ä¿¡æ¯ã ç¨å¾ç¤ºæ¥è¯´æï¼é¦å åç°ä¸å¾ï¼  ç¨æ·ç¹å»âç»å½âæé®ï¼ç»è¿éªè¯æ¯åæ³ç¨æ·ä¹åï¼å°±åç°è¿æ ·ççé¢ï¼  å ç¨HTMLå好第ä¸ä¸ªçé¢ãè¿å ¥å°templatesæä»¶ï¼å»ºç«å为index.htmlçæä»¶ï¼
`以å ãæ¾å¨å¼å¤´ï¼å¦ææç¨çåºæ¯è¾å¤§ãæ¯è¾å¤ï¼å¨è½½å ¥é¡µé¢æ¶æ¶é´ç¸å¯¹é¿ç¹ã 第ä¸ç§å¼å ¥æ¹æ³ï¼æ¯å½é åçä¸ç§ï¼ è¿æ¯ç´æ¥ä»jQuery CDN(Content Delivery Network)ä¸ç´æ¥å¼ç¨ï¼å¥½å¤å¨äºå¦æè¿ä¸ªåºæ´æ°ï¼ä½ ä¸ç¨ä»»ä½æä½ï¼å°±ç´æ¥ä½¿ç¨ææ°çäºã使¯ï¼å¦æå¨ä½ çç½é¡µä¸è¿ä¹ç¨äºï¼å¦æå¨æä¸ªæå¾å¤èªä¿¡çå½å®¶ä¸ç½ï¼å¹¶ä¸æ²¡ææ¢¯åï¼ä¼åç°ç½é¡µå 乿ä¸å¼ï¼å°±æ¯å ä¸ºè¿æ¥ä¸é¢é£ä¸ªå°åçééæ¯è¢«å¢äºã å½ç¶ï¼jQuery CDN䏿¢ä¸ä¸ªï¼æ¯å¦å®æ¹ç½ç«çï¼ ç¬¬äºç§å¼å ¥æ¹æ³ï¼å°±æ¯å°jQueryä¸è½½ä¸æ¥ï¼æ¾å¨æå®å°æ¹ï¼æ¯å¦ï¼ä¸èªå·±ç½ç«å¨åä¸ä¸ªåå¨å¨ä¸ï¼æè èªå·±å¯ä»¥è®¿é®çå¦å¤æå¡å¨ï¼ãå°å®æ¹ç½ç«ï¼[https://jqueryui.com/](https://jqueryui.com/)ï¼ä¸è½½ææ°çåºï¼ç¶åå°å®æ¾å¨å·²ç»å»ºç«çstaticsç®å½å ï¼ä¸ºäºæ´æ¸ æ¥åºåï¼å¯ä»¥å¨éé¢å»ºç«ä¸ä¸ªåç®å½jsï¼jqueryåºæ¾å¨jsåç®å½éé¢ãä¸è½½çæ¶åï¼å»ºè®®ä¸è½½ä»¥min.jsç»å°¾çæä»¶ï¼å 为è¿ä¸ªæ¯ç»è¿å缩ä¹åï¼ä½ç§¯å°ã æå¨`statics/js`ç®å½ä¸æ¾ç½®äºä¸è½½çåºï¼å¹¶ä¸ä¸ºäºç®çï¼æ´å为jquery.min.jsã æ¬æ¥å¯ä»¥ç¨ä¸é¢çæ¹æ³å¼å ¥ï¼ å¦æè¿æ ·åï¼ä¹æ¯å¯ä»¥çã使¯ï¼èèå°tornadoçç¹ç¹ï¼ç¨ä¸é¢æ¹æ³å¼å ¥ï¼æ´å ·æçµæ´»æ§ï¼ ä¸ä» è¦å¼å ¥jqueryï¼è¿éè¦å¼å ¥èªå·±åçjsæä»¤ï¼æä»¥è¦å»ºç«ä¸ä¸ªæä»¶ï¼æå½å为script.jsï¼ä¹åæ¶å¼ç¨è¿æ¥ãè½ç¶ç®åè¿ä¸ªæä»¶è¿æ¯ç©ºçã è¿éç¨çstatic_urlæ¯ä¸ä¸ªå½æ°ï¼å®æ¯tornadoæ¨¡æ¿æä¾çä¸ä¸ªå½æ°ãç¨è¿ä¸ªå½æ°ï¼è½å¤å¶å®éææä»¶ã乿以ç¨å®ï¼è䏿¯ç¨ä¸é¢çé£ç§ç´æ¥è°ç¨çæ¹æ³ï¼ä¸»è¦åå æ¯å¦ææä¸å¤©ï¼å°éææä»¶ç®å½staticsä¿®æ¹äºï¼ä¹å°±æ¯ä¸æå®staticsä¸ºéææä»¶ç®å½äºï¼å®ä¹å«çç®å½ä¸ºéææä»¶ç®å½ãåªéè¦å¨å®ä¹éææä»¶ç®å½é£éä¿®æ¹ï¼å®ä¹éææä»¶ç®å½çæ¹æ³è¯·åçä¸ä¸èï¼ï¼èå ¶å®å°æ¹ç代ç ä¸éè¦ä¿®æ¹ã ###ç¼åjs å åä¸ä¸ªæµè¯æ§è´¨çä¸è¥¿ã ç¨ç¼è¾å¨æå¼statics/js/script.jsæä»¶ï¼å¦ææ²¡æå°±æ°å»ºãè¾å ¥ç代ç å¦ä¸ï¼ $(document).ready(function(){ alert("good"); $("#login").click(function(){ var user = $("#username").val(); var pwd = $("#password").val(); alert("username: "+user); }); }); ç±äºæ¬æç¨ä¸æ¯ä¸é¨è®²æjavascriptæè jqueryï¼æä»¥ï¼å¨js代ç é¨åï¼åªè½ä¸å¸¦èè¿ï¼ä¸è¯¦ç»è§£éã ä¸é¢ç代ç 主è¦å®ç°è·å表åä¸idå¼åå«ä¸ºusernameåpasswordæè¾å ¥çå¼ï¼alert彿°çåè½æ¯æå¼ä»¥å¼¹åºèåçæ¹å¼æ¾ç¤ºåºæ¥ã ##handlerséé¢çç¨åº æ¯å¦è¿è®°å¾å¨ä¸ä¸èä¸ï¼å¨url.pyæä»¶ä¸ï¼åäºè¿æ ·çè®¾ç½®ï¼ from handlers.index import IndexHandler #åè®¾å·²ç»æäº url = [ (r'/', IndexHandler), ] ç°å¨å°±å»æå设æäºçé£ä¸ªæä»¶å»ºç«èµ·æ¥ï¼å³å¨handlerséé¢å»ºç«index.pyæä»¶ï¼å¹¶åå ¥å¦ä¸ä»£ç ï¼ #!/usr/bin/env python # coding=utf-8 import tornado.web class IndexHandler(tornado.web.RequestHandler): def get(self): self.render("index.html") å½è®¿é®æ ¹ç®å½çæ¶åï¼ä¸è®ºè¾å ¥`localhost:8000`ï¼è¿æ¯`http://127.0.0.1:8000`ï¼æè ç½ç«ååï¼ï¼å°±å°ç¸åºç请æ±äº¤ç»äºhandlersç®å½ä¸çindex.pyæä»¶ä¸çIndexHandlerç±»çget()æ¹æ³æ¥å¤çï¼å®çå¤çç»ææ¯åç°index.html模æ¿å 容ã `render()`彿°çåè½å¨äºå请æ±è åé¦ç½é¡µæ¨¡æ¿ï¼å¹¶ä¸å¯ä»¥å模æ¿ä¸ä¼ éæ°å¼ãå ³äºä¼ éæ°å¼çå 容ï¼å¨åé¢ä»ç»ã ä¸é¢çæä»¶ä¿åä¹åï¼åå°handlersç®å½ä¸ãå 为è¿éé¢çæä»¶è¦å¨å«å¤è¢«å½å模åå¼ç¨ï¼æä»¥ï¼éè¦å¨è¿é建ç«ä¸ä¸ªç©ºæä»¶ï¼å½å为`__init__.py`ãè¿ä¸ªæä»¶é常éè¦ãå¨[ç¼å模å](./219.md)ä¸èä¸ï¼ä»ç»äºå¼ç¨æ¨¡åçæ¹æ³ã使¯ï¼é£äºæ¹æ³æä¸ä¸ªå¼ç«¯ï¼å°±æ¯å¦ææä¸ªç®å½ä¸æå¤ä¸ªæä»¶ï¼å°±æ¾å¾éº»ç¦äºãå ¶å®pythonå·²ç»æ³å°è¿ç¹äºï¼äºæ¯å°±æä¾äº`__init__.py`æä»¶ï¼åªè¦å¨è¯¥ç®å½ä¸å å ¥äºè¿ä¸ªæä»¶ï¼è¯¥ç®å½ä¸çå ¶å®.pyæä»¶å°±å¯ä»¥ä½ä¸ºæ¨¡å被pythonå¼å ¥äºã è³æ¤ï¼ä¸ä¸ªå¸¦æè¡¨åçtornadoç½ç«å°±å»ºç«èµ·æ¥äºã读è å¯ä»¥åå°ä¸ä¸çº§ç®å½ä¸ï¼æ¾å°server.pyæä»¶ï¼è¿è¡å®ï¼ $ python server.py Development server is running at http://127.0.0.1:8000 Quit the server with Control-C å¦æè¯»è å¨åé¢çå¦ä¹ ä¸ï¼è·æçæä½å®å ¨ä¸è´ï¼å°±ä¼å¨shellä¸çå°ä¸é¢çç»æã æå¼æµè§å¨ï¼è¾å ¥`http://localhost:8000`æè `http://127.0.0.1:8000`ï¼çå°çåºè¯¥æ¯ï¼  è¿å°±æ¯script.jsä¸çå¼å§èµ·ä½ç¨äºï¼ç¬¬ä¸å¥æ¯è¦å¼¹åºä¸ä¸ªå¯¹è¯æ¡ãç¹å»âç¡®å®âæé®ä¹åï¼å°±æ¯ï¼  å¨è¿ä¸ªé¡µé¢è¾å ¥ç¨æ·ååå¯ç ï¼ç¶åç¹å»Loginæé®ï¼å°±æ¯ï¼  ä¸ä¸ªç½ç«æäºéå½¢ãä¸è¿ï¼å½æäº¤è¡¨åçååºï¼è¿ä» ä» åçå¨å®¢æ·ç«¯ï¼è¿æ²¡æååç«¯ä¼ é客æ·ç«¯çæ°æ®ä¿¡æ¯ã请继ç»å¦ä¹ ä¸ä¸èã ------ [æ»ç®å½](./index.md) | [ä¸èï¼ç¨tornadoåç½ç«(1)](./303.md) | [ä¸èï¼ç¨tornadoåç½ç«(3)](./305.md) å¦æä½ è®¤ä¸ºæå¿ è¦æèµæï¼è¯·éè¿æ¯ä»å®ï¼**[email protected]**,ä¸èææ¿ã