摘要:在年時,由網(wǎng)景公司的布蘭登艾克,在網(wǎng)景導航者瀏覽器上首次設計實作而成。為了取得技術優(yōu)勢,微軟推出了,推出,與同樣可在瀏覽器上運行。在表單中還要注意,有一個,表示的是要將表單的內容提交給路徑所對應的程序來處理。
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)
如果像前面那么做網(wǎng)站,也太丑陋了。并且功能也不多。
在實際做網(wǎng)站中,現(xiàn)在都要使用一個模板,并且在用戶直接看到的頁面,用html語言來寫頁面(關于HTML,本教程默認為看官已經(jīng)熟悉,如果不熟悉,可以到找有關教程來學習)。
在做網(wǎng)站的行業(yè)里面,常常將HTML+CSS+JS組成的網(wǎng)頁,稱作“前端”。它主要負責展示,或者讓用戶填寫一些表格,通過JS提交給用python寫的程序,讓python程序來處理數(shù)據(jù),那些處理數(shù)據(jù)的python程序稱之為“后端”。我常常提醒做“后端”的,不要輕視“前端”。如果看官立志成為全棧工程師,就要從前到后都通。
在本講中,為了突出模板和后端程序,我略去CSS+JS,雖然這樣一來界面難看,而且用戶的友好度也不怎么樣(JS,javascript是使網(wǎng)頁變得更友好的重要工具,如不用更換地址就能刷新頁面等等,特別提醒看官,一定要學好javascript,雖然這個可能沒有幾個大學教的。請看維基百科對javascript簡介:)。
JavaScript,一種直譯式腳本語言,是一種動態(tài)類型、弱類型、基于原型的語言,內置支持類。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用于客戶端的腳本語言,最早是在HTML網(wǎng)頁上使用,用來給HTML網(wǎng)頁增加動態(tài)功能。然而現(xiàn)在JavaScript也可被用于網(wǎng)絡服務器,如Node.js。
在1995年時,由網(wǎng)景公司的布蘭登·艾克,在網(wǎng)景導航者瀏覽器上首次設計實作而成。因為網(wǎng)景公司與升陽公司合作,網(wǎng)景公司管理層次結構希望它外觀看起來像Java,因此取名為JavaScript。但實際上它的語法風格與Self及Scheme較為接近。
為了取得技術優(yōu)勢,微軟推出了JScript,CEnvi推出ScriptEase,與JavaScript同樣可在瀏覽器上運行。為了統(tǒng)一規(guī)格,1997年,在ECMA(歐洲計算機制造商協(xié)會)的協(xié)調下,由Netscape、Sun、微軟、Borland組成的工作組確定統(tǒng)一標準:ECMA-262。因為JavaScript兼容于ECMA標準,因此也稱為ECMAScript。
上面這段引文里面提到了一個非常著名的公司:網(wǎng)景,可能年青一代都忘卻了。也建議有興趣的看官到維基百科中了解這個傳奇公司,它曾經(jīng)有一個傳奇產(chǎn)品,雖然名字不復存在,但是Firefox是秉承它衣缽的。
話題再轉回來,還是關于本講,主要是要演示一個用模板(HTML)寫一個表單,然后提交給后端的python程序,再轉到另外一個顯示的前端頁面顯示。為了簡化流程,這個過程中沒有數(shù)據(jù)處理和CSS+Javascript的工作,所有界面會丑陋。但是,“我很丑,可是我很溫柔”。
一個表單要做一個前端的頁面,顯示的內容就如同下圖樣式
相應代碼是,并命名為index.html,存在一個名稱是template的目錄中。
sign in your name Please sing in.
上面的代碼是比較簡單,如果看官熟悉html的話,不熟悉也不要緊,網(wǎng)上搜索就能理解。注意,沒有CSS+JS,所以簡單。如果在真正開發(fā)中,這兩個是不能少的。
有了這個表單之后,如果用戶把相關信息都填寫好了。點擊下面的按鈕,就應該提交給后端的python程序來處理。
后端處理程序做為tornado驅動的網(wǎng)站,首先要能夠把前面的index.html顯示出來,這個一般用get方法,顯示的樣式就按照上面的樣子顯示。
用戶填寫信息之后,點擊按鈕提交。注意觀察上面的代碼表單中,設定了post方法,所以,在python程序中,應該有一個post方法專門來接收所提交的數(shù)據(jù),然后把提交的數(shù)據(jù)在另外一個網(wǎng)頁顯示出來。
在表單中還要注意,有一個action=/user,表示的是要將表單的內容提交給/user路徑所對應的程序來處理。這里需要說明的是,在網(wǎng)站中,數(shù)據(jù)提交和顯示,路徑是非常重要的。
按照以上意圖,編寫如下代碼,并命名為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()
這次代碼量多一些。但是多數(shù)在前面講述tornado基本結構的時候已經(jīng)說過了,跟前面一樣,這里僅僅把重點的和新出現(xiàn)的進行講述,如果看官對某些內容還有疑問,可以參考前面的相關章節(jié)。
在引入的模塊上,多了一個import os.path,這個模塊主要用在:
template_path = os.path.join(os.path.dirname(__file),"template")
這是要獲取存放程序的目錄template的路徑。
重點看兩個類中都有的self.render(),用這個方法引入相應的模板。
self.render("index.html")
顯示index.html模板,但是此時并沒有向模板網(wǎng)頁傳遞任何數(shù)據(jù),僅僅顯示罷了。下面一個:
self.render("user.html",username=user_name,email=user_email,website=user_website,language=user_language)
與前面的不同在于,不僅僅是要引用模板網(wǎng)頁user.html,還要向這個網(wǎng)頁傳遞一些數(shù)據(jù),例如username=user_name,含義就是,在模板中,某個地方是用username來標示得到的數(shù)據(jù),而user_name是此方法中的一個變量,也就是對應一個數(shù)據(jù),那么模板中的username也就對應了user_name的數(shù)據(jù),這是通過username=user_name完成的(說的有點像外語了)。后面的變量同理。
那么,user_name的數(shù)據(jù)是哪里來的呢?就是在index.html頁面的表單中提交上來的。注意觀察路徑的設置,r"/user", UserHandler,也就是在form中的action="/user",就是要將數(shù)據(jù)提交給UserHandler處理,并且是通過post方法。所以,在UserHandler類中,有post()方法來處理這個問題。通過self.get_argument()來接收前端提交過來的數(shù)據(jù),接收方法就是,self.get_argument()的參數(shù)與index.html表單form中的各項的name值相同,就會得到相應的數(shù)據(jù)。例如user_name = self.get_argument("username"),就能夠得到index.html表單中name為"username"的元素的值,并賦給user_name變量。
還差一個網(wǎng)頁。
顯示結果在上面的代碼中,又多了一個模板: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的文件,并且和前面已經(jīng)保存的在同一個目錄中。
看HTML模板代碼中,有類似{{username}}的變量,模板中用{{}}引入變量,這個變量就是在self.render()中規(guī)定的,兩者變量名稱一致,對應將相應的值對象引入到模板中。
運行結果進入到template目錄,執(zhí)行:
qw@qw-Latitude-E4300:~/template$ python userscontroller.py
然后在瀏覽器的地址欄中輸入
http://localhost:8000
出現(xiàn)如下圖的表單,并填寫表單內容
點擊“按鈕”之后:
這樣就實現(xiàn)了一個簡單表單提交的網(wǎng)站。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37444.html
摘要:在的模板中,功能還是很不少的,本講介紹模板語法先。然后在模板中,利用語句,依次顯示得到的列表中的元素。的代碼不變,只修改模板的代碼,重點理解模板中的語句寫法。這樣就是實現(xiàn)了模板中變量的使用。 Come to me, all you that are weary and are carrying heavy burdens, and I will give you rest. Ta...
摘要:軟件開發(fā)者通常依據(jù)特定的框架實現(xiàn)更為復雜的商業(yè)運用和業(yè)務邏輯。所有,做開發(fā),要用一個框架。的性能是相當優(yōu)異的,因為它師徒解決一個被稱之為問題,就是處理大于或等于一萬的并發(fā)。 One does not live by bread alone,but by every word that comes from the mouth of God --(MATTHEW4:4) 不...
摘要:下面的例子就是一個項目的基本框架。一檢查,發(fā)現(xiàn)一個重要的目錄里面還空著呢,那里面放文件,這個文件里面是請求響應的類這個文件的代碼沒有什么增加的內容,只是多了三行設置為的配置,目的是避免漢字亂碼。 just as the Son of Man came not to be served but to serve, and to give his life a ransom for ...
摘要:的非阻塞單線程的特點在這個模塊中體現(xiàn)。還有一個模塊引入,是用完成的這兩句就顯示了所謂命令行解析模塊的用途了。表示可以接收來自的請求了。以上把一個簡單的剖析。 As he walked by the sea of Galilee, he saw two brothers, Simon, who is called Peter, and Andrew his brother, cas...
摘要:特別提醒,看官不要自宮,因為本教程不是辟邪劍譜,也不是葵花寶典,撰寫本課程的人更是生理健全者。直到目前,科學上尚未有證實或證偽自宮和寫程序之間是否存在某種因果關系。和是中用的最多的方法啦。 Do not store up for yourselves treasures on earth, where moth and rust consume and where thieves...
閱讀 1893·2021-11-24 11:16
閱讀 3257·2021-09-10 10:51
閱讀 3180·2021-08-03 14:03
閱讀 1261·2019-08-29 17:03
閱讀 3238·2019-08-29 12:36
閱讀 2218·2019-08-26 14:06
閱讀 493·2019-08-23 16:32
閱讀 2661·2019-08-23 13:42