>But when he heard this, he said:"Those who are well have no need of a physician, but those who are sick. Go and learn what this means,'Idesire mercy, not sacrifice' For I have come to call not the righteous but sinners."(MATTHEW 9:12)
#使ç¨è¡¨å忍¡æ¿
妿ååé¢é£ä¹åç½ç«ï¼ä¹å¤ªä¸éäºãå¹¶ä¸åè½ä¹ä¸å¤ã
å¨å®é
åç½ç«ä¸ï¼ç°å¨é½è¦ä½¿ç¨ä¸ä¸ªæ¨¡æ¿ï¼å¹¶ä¸å¨ç¨æ·ç´æ¥çå°ç页é¢ï¼ç¨htmlè¯è¨æ¥å页é¢ï¼å
³äºHTMLï¼æ¬æç¨é»è®¤ä¸ºçå®å·²ç»çæï¼å¦æä¸çæï¼å¯ä»¥å°æ¾æå
³æç¨æ¥å¦ä¹ ï¼ã
å¨åç½ç«çè¡ä¸éé¢ï¼å¸¸å¸¸å°HTML+CSS+JSç»æçç½é¡µï¼ç§°ä½âå端âãå®ä¸»è¦è´è´£å±ç¤ºï¼æè
è®©ç¨æ·å¡«åä¸äºè¡¨æ ¼ï¼éè¿JSæäº¤ç»ç¨pythonåçç¨åºï¼è®©pythonç¨åºæ¥å¤çæ°æ®ï¼é£äºå¤çæ°æ®çpythonç¨åºç§°ä¹ä¸ºâå端âãæå¸¸å¸¸æéåâå端âçï¼ä¸è¦è½»è§âå端âã妿çå®ç«å¿æä¸ºå
¨æ å·¥ç¨å¸ï¼å°±è¦ä»åå°åé½éã
卿¬è®²ä¸ï¼ä¸ºäºçªåºæ¨¡æ¿åå端ç¨åºï¼æç¥å»CSS+JSï¼è½ç¶è¿æ ·ä¸æ¥çé¢é¾çï¼èä¸ç¨æ·çå好度ä¹ä¸æä¹æ ·ï¼JSï¼javascriptæ¯ä½¿ç½é¡µå徿´å好çéè¦å·¥å
·ï¼å¦ä¸ç¨æ´æ¢å°åå°±è½å·æ°é¡µé¢ççï¼ç¹å«æéçå®ï¼ä¸å®è¦å¦å¥½javascriptï¼è½ç¶è¿ä¸ªå¯è½æ²¡æå ä¸ªå¤§å¦æçã请çç»´åºç¾ç§å¯¹javascriptç®ä»ï¼ï¼ã
>JavaScriptï¼ä¸ç§ç´è¯å¼èæ¬è¯è¨ï¼æ¯ä¸ç§å¨æç±»åã弱类åãåºäºååçè¯è¨ï¼å
ç½®æ¯æç±»ãå®çè§£éå¨è¢«ç§°ä¸ºJavaScript弿ï¼ä¸ºæµè§å¨çä¸é¨åï¼å¹¿æ³ç¨äºå®¢æ·ç«¯çèæ¬è¯è¨ï¼ææ©æ¯å¨HTMLç½é¡µä¸ä½¿ç¨ï¼ç¨æ¥ç»HTMLç½é¡µå¢å 卿åè½ãç¶èç°å¨JavaScriptä¹å¯è¢«ç¨äºç½ç»æå¡å¨ï¼å¦Node.jsã
>å¨1995å¹´æ¶ï¼ç±ç½æ¯å
¬å¸çå¸å
°ç»Â·è¾å
ï¼å¨ç½æ¯å¯¼èªè
æµè§å¨ä¸é¦æ¬¡è®¾è®¡å®ä½èæãå ä¸ºç½æ¯å
¬å¸ä¸åé³å
¬å¸åä½ï¼ç½æ¯å
¬å¸ç®¡ç屿¬¡ç»æå¸æå®å¤è§çèµ·æ¥åJavaï¼å æ¤åå为JavaScriptãä½å®é
ä¸å®çè¯æ³é£æ ¼ä¸SelfåSchemeè¾ä¸ºæ¥è¿ã
>为äºå徿æ¯ä¼å¿ï¼å¾®è½¯æ¨åºäºJScriptï¼CEnviæ¨åºScriptEaseï¼ä¸JavaScriptåæ ·å¯å¨æµè§å¨ä¸è¿è¡ã为äºç»ä¸è§æ ¼ï¼1997å¹´ï¼å¨ECMAï¼æ¬§æ´²è®¡ç®æºå¶é ååä¼ï¼çåè°ä¸ï¼ç±NetscapeãSunã微软ãBorlandç»æçå·¥ä½ç»ç¡®å®ç»ä¸æ åï¼ECMA-262ãå 为JavaScriptå
¼å®¹äºECMAæ åï¼å æ¤ä¹ç§°ä¸ºECMAScriptã
ä¸é¢è¿æ®µå¼æé颿å°äºä¸ä¸ªé常èåçå
¬å¸ï¼ç½æ¯ï¼å¯è½å¹´éä¸ä»£é½å¿å´äºãä¹å»ºè®®æå
´è¶£ççå®å°ç»´åºç¾ç§ä¸äºè§£è¿ä¸ªä¼ å¥å
¬å¸ï¼å®æ¾ç»æä¸ä¸ªä¼ å¥äº§åï¼è½ç¶ååä¸å¤åå¨ï¼ä½æ¯Firefoxæ¯ç§æ¿å®è¡£éµçã
è¯é¢åè½¬åæ¥ï¼è¿æ¯å
³äºæ¬è®²ï¼ä¸»è¦æ¯è¦æ¼ç¤ºä¸ä¸ªç¨æ¨¡æ¿ï¼HTMLï¼åä¸ä¸ªè¡¨åï¼ç¶åæäº¤ç»å端çpythonç¨åºï¼å转å°å¦å¤ä¸ä¸ªæ¾ç¤ºçåç«¯é¡µé¢æ¾ç¤ºã为äºç®åæµç¨ï¼è¿ä¸ªè¿ç¨ä¸æ²¡ææ°æ®å¤çåCSS+Javascriptçå·¥ä½ï¼ææçé¢ä¼ä¸éã使¯ï¼âæå¾ä¸ï¼å¯æ¯æå¾æ¸©æâã
##ä¸ä¸ªè¡¨å
è¦åä¸ä¸ªå端ç页é¢ï¼æ¾ç¤ºçå
容就å¦åä¸å¾æ ·å¼

ç¸åºä»£ç æ¯ï¼å¹¶å½å为index.htmlï¼åå¨ä¸ä¸ªåç§°æ¯templateçç®å½ä¸ã
sign in your name
Please sing in.
ä¸é¢çä»£ç æ¯æ¯è¾ç®åï¼å¦æçå®çæhtmlçè¯ï¼ä¸çæä¹ä¸è¦ç´§ï¼ç½ä¸æç´¢å°±è½çè§£ãæ³¨æï¼æ²¡æCSS+JSï¼æä»¥ç®åã妿å¨çæ£å¼åä¸ï¼è¿ä¸¤ä¸ªæ¯ä¸è½å°çã
æäºè¿ä¸ªè¡¨åä¹åï¼å¦æç¨æ·æç¸å
³ä¿¡æ¯é½å¡«å好äºãç¹å»ä¸é¢çæé®ï¼å°±åºè¯¥æäº¤ç»å端çpythonç¨åºæ¥å¤çã
##å端å¤çç¨åº
å为tornado驱å¨çç½ç«ï¼é¦å
è¦è½å¤æåé¢çindex.htmlæ¾ç¤ºåºæ¥ï¼è¿ä¸ªä¸è¬ç¨getæ¹æ³ï¼æ¾ç¤ºçæ ·å¼å°±æç
§ä¸é¢çæ ·åæ¾ç¤ºã
ç¨æ·å¡«åä¿¡æ¯ä¹åï¼ç¹å»æé®æäº¤ã注æè§å¯ä¸é¢ç代ç 表åä¸ï¼è®¾å®äº`post`æ¹æ³ï¼æä»¥ï¼å¨pythonç¨åºä¸ï¼åºè¯¥æä¸ä¸ªpostæ¹æ³ä¸é¨æ¥æ¥æ¶ææäº¤çæ°æ®ï¼ç¶åææäº¤çæ°æ®å¨å¦å¤ä¸ä¸ªç½é¡µæ¾ç¤ºåºæ¥ã
å¨è¡¨åä¸è¿è¦æ³¨æï¼æä¸ä¸ª`action=/user`ï¼è¡¨ç¤ºçæ¯è¦å°è¡¨åçå
容æäº¤ç»`/user`è·¯å¾æå¯¹åºçç¨åºæ¥å¤çãè¿ééè¦è¯´æçæ¯ï¼å¨ç½ç«ä¸ï¼æ°æ®æäº¤åæ¾ç¤ºï¼è·¯å¾æ¯é常éè¦çã
æç
§ä»¥ä¸æå¾ï¼ç¼åå¦ä¸ä»£ç ï¼å¹¶å½å为usercontroller.pyï¼ä¿åå¨templateç®å½ä¸
#!/usr/bin/env python
#coding:utf-8
import os.path
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html")
class UserHandler(tornado.web.RequestHandler):
def post(self):
user_name = self.get_argument("username")
user_email = self.get_argument("email")
user_website = self.get_argument("website")
user_language = self.get_argument("language")
self.render("user.html",username=user_name,email=user_email,website=user_website,language=user_language)
handlers = [
(r"/", IndexHandler),
(r"/user", UserHandler)
]
template_path = os.path.join(os.path.dirname(__file__),"template")
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers, template_path)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
è¿æ¬¡ä»£ç éå¤ä¸äºã使¯å¤æ°å¨åé¢è®²è¿°tornadoåºæ¬ç»æçæ¶åå·²ç»è¯´è¿äºï¼è·åé¢ä¸æ ·ï¼è¿éä»
ä»
æéç¹çåæ°åºç°çè¿è¡è®²è¿°ï¼å¦æçå®å¯¹æäºå
å®¹è¿æçé®ï¼å¯ä»¥åèåé¢çç¸å
³ç« èã
å¨å¼å
¥ç模åä¸ï¼å¤äºä¸ä¸ª`import os.path`ï¼è¿ä¸ªæ¨¡å主è¦ç¨å¨ï¼
template_path = os.path.join(os.path.dirname(__file),"template")
è¿æ¯è¦è·ååæ¾ç¨åºçç®å½`template`çè·¯å¾ã
éç¹ç两个类ä¸é½æç`self.render()`ï¼ç¨è¿ä¸ªæ¹æ³å¼å
¥ç¸åºç模æ¿ã
self.render("index.html")
æ¾ç¤ºindex.html模æ¿ï¼ä½æ¯æ¤æ¶å¹¶æ²¡æå模æ¿ç½é¡µä¼ é任使°æ®ï¼ä»
ä»
æ¾ç¤ºç½¢äºãä¸é¢ä¸ä¸ªï¼
self.render("user.html",username=user_name,email=user_email,website=user_website,language=user_language)
ä¸åé¢çä¸åå¨äºï¼ä¸ä»
ä»
æ¯è¦å¼ç¨æ¨¡æ¿ç½é¡µuser.htmlï¼è¿è¦åè¿ä¸ªç½é¡µä¼ éä¸äºæ°æ®ï¼ä¾å¦username=user_nameï¼å«ä¹å°±æ¯ï¼å¨æ¨¡æ¿ä¸ï¼æä¸ªå°æ¹æ¯ç¨usernameæ¥æ 示å¾å°çæ°æ®ï¼èuser_nameæ¯æ¤æ¹æ³ä¸çä¸ä¸ªåéï¼ä¹å°±æ¯å¯¹åºä¸ä¸ªæ°æ®ï¼é£ä¹æ¨¡æ¿ä¸çusernameä¹å°±å¯¹åºäºuser_nameçæ°æ®ï¼è¿æ¯éè¿username=user_name宿çï¼è¯´çæç¹åå¤è¯äºï¼ãåé¢çåéåçã
é£ä¹ï¼user_nameçæ°æ®æ¯åªéæ¥çå¢ï¼å°±æ¯å¨index.html页é¢ç表åä¸æäº¤ä¸æ¥çãæ³¨æè§å¯è·¯å¾ç设置ï¼`r"/user", UserHandler`ï¼ä¹å°±æ¯å¨formä¸ç`action='/user'`ï¼å°±æ¯è¦å°æ°æ®æäº¤ç»UserHandlerå¤çï¼å¹¶ä¸æ¯éè¿postæ¹æ³ãæä»¥ï¼å¨UserHandlerç±»ä¸ï¼æpost()æ¹æ³æ¥å¤çè¿ä¸ªé®é¢ãéè¿self.get_argument()æ¥æ¥æ¶å端æäº¤è¿æ¥çæ°æ®ï¼æ¥æ¶æ¹æ³å°±æ¯ï¼self.get_argument()çåæ°ä¸index.html表åformä¸çå项çnameå¼ç¸åï¼å°±ä¼å¾å°ç¸åºçæ°æ®ãä¾å¦`user_name = self.get_argument("username")`ï¼å°±è½å¤å¾å°index.html表åä¸name为"username"çå
ç´ çå¼ï¼å¹¶èµç»user_nameåéã
è¿å·®ä¸ä¸ªç½é¡µã
##æ¾ç¤ºç»æ
å¨ä¸é¢ç代ç ä¸ï¼åå¤äºä¸ä¸ªæ¨¡æ¿ï¼`index.html`ï¼å¯¹è¿ä¸ªæ¨¡æ¿ï¼è·åé¢é£ä¸ªæ¨¡æ¿æä¸ç¹å¿ä¸ä¸æ ·çå°æ¹ï¼å°±æ¯è¦å¼å
¥ä¸äºåéãå®çä»£ç æ¯è¿æ ·çï¼
sign in your name
Your Information
Your name is {{username}}
Your email is {{email}}
Your website is {{website}}, it is very good. This website is make by {{language}}
请å°ä¸é¢ç代ç åè¿å¥è¯å¯¹ç
§ï¼
self.render("user.html",username=user_name,email=user_email,website=user_website,language=user_language)
ä¸é¢ç模æ¿ä»£ç åå¨ä¸ºå为`user.html`çæä»¶ï¼å¹¶ä¸ååé¢å·²ç»ä¿åçå¨åä¸ä¸ªç®å½ä¸ã
çHTML模æ¿ä»£ç ä¸ï¼æç±»ä¼¼`{{username}}`çåéï¼æ¨¡æ¿ä¸ç¨`{{}}`å¼å
¥åéï¼è¿ä¸ªåéå°±æ¯å¨`self.render()`ä¸è§å®çï¼ä¸¤è
åéåç§°ä¸è´ï¼å¯¹åºå°ç¸åºçå¼å¯¹è±¡å¼å
¥å°æ¨¡æ¿ä¸ã
##è¿è¡ç»æ
è¿å
¥å°templateç®å½ï¼æ§è¡ï¼
qw@qw-Latitude-E4300:~/template$ python userscontroller.py
ç¶å卿µè§å¨çå°åæ ä¸è¾å
¥
http://localhost:8000
åºç°å¦ä¸å¾ç表åï¼å¹¶å¡«å表åå
容

ç¹å»âæé®âä¹åï¼

è¿æ ·å°±å®ç°äºä¸ä¸ªç®å表åæäº¤çç½ç«ã