iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 17
1
Modern Web

三十天全端學習:透過javascript(Onsen UI)、python(tornado)、非關聯式資料庫(mongoDB)完成全端學習,建置web app、mobile app。系列 第 17

三十天全端學習(javascript、python、mongoDB)---第十七天: python tornado後台架設---實戰篇 I

https://ithelp.ithome.com.tw/upload/images/20181025/20102269RaHUswoADT.jpg

第十七天: python tornado後台架設---實戰篇 I

實戰篇開始的首圖,開始不一樣了,黑修斯是每天都會反省的人,因為靈感總在深夜時,深夜時刻總是文思泉湧,好像廢話多了,反思一下,其實程式是從有價購的實作去學習更好,高效的學習是高效的輸入與輸出,才能獲得最好的學習經驗。
所以請大家真的要好好實作。


前提概要

day16介紹了yeild的用法,主要是讓大家了解非阻塞式的I/O用法,或說非同步的用法。


本文概要

實戰中學習tornado程式碼架構與呈現出的網頁。
今天的程式碼也會上傳到github 中。


正文開始

程式碼協同函數庫gen:

程式碼協同? 一般人可能會很陌生,程式碼協同 主要用在非阻塞式的架構,更簡單來說,當你的伺服器有一百萬人同時要存取,你的程式碼不可以讓大家等,阻塞了通道,因此需要協同函式,當結果處理完畢再啟用連接通道,避免大家塞車。
舉個栗子
非同步 就像是我們大家去買麥當勞,都是點完餐拿號碼牌,去旁邊等餐。
同步 就是 今天麥當勞改策略了,第一個客人的餐點從點餐、製作到出餐到我們手上,你都必須在櫃檯前等,直到你要的東西好了,才可以走,那這個時候,後面的人想點餐要等很久,而櫃檯已經幫你點好餐了,卻要跟你一起在櫃檯前等,浪費時間。

所以,你的網站應該是要想非同步的狀況一樣,讓所有人都可以在櫃檯(前台)快速點餐(要求資料),等到廚房後場(後台)將餐點製作完成(接收資料請求並處理資料完成),再透過前台跟你說餐點好了,可以取餐了。是比較理想的狀況。

1. 第一個非同步網站請求程式:

程式碼放在github , day17/day17_ex1.py

以下範例是,對IT邦網站做請求的動作,如果連接成功,會返回網站內容,若是錯誤,會有我們定義的網站錯誤代碼:500。
https://ithelp.ithome.com.tw/upload/images/20181025/20102269uiBelHG16q.png
紅色號球1:定義的類別繼承了tornado的web.RequestHandler。
紅色號球2:上面加載了@tornado.web.asynchronous 裝飾器(@),宣告為非同步程序,多載get()函式,對應到RequestHandler函式中的http get。
紅色號球3非同步案例 ,當IT邦網站載入完成,才會顯示網站,若是等待太久,或是載入錯誤,會出現我們定義的網站錯誤代碼:500,如下圖所示:
紅色號球4:port設定為8888

執行程式後,在網址中輸入localhost:8888,會等待網站載入,如下圖:
https://ithelp.ithome.com.tw/upload/images/20181025/20102269XWN0nb4CFe.png

連線錯誤會出現以下錯誤:
https://ithelp.ithome.com.tw/upload/images/20181025/201022695VRNkmBLdR.png
https://ithelp.ithome.com.tw/upload/images/20181025/20102269WqR04d227S.png

cmd端的程式也會出現如下錯誤訊息:

連線成功後,會如下圖:

2. 第一個同步tornado網站程式

程式碼放在github , day17/day17_ex2.py

一開始應該要先放這個給各位讀者的,不過在前幾天的文章中有介紹過了,才放在第二個練習中。
這一個標準的tornado網站程式架構:

紅色號球1:定義的類別繼承了tornado的web.RequestHandler。
紅色號球2:定義自己的app,內容有一個路由。
紅色號球3:定義主程序。
紅色號球4:不斷循環主程序。

最終成功後,會出現如下圖畫面:

3. 小作業

程式碼放在github , day17/day17_ex3.py

  1. 試著改變不同的port,並連線測試。
  2. 試著改變一些結構。

可以參考 day17_ex3.py 中,我修改的地方。


小結

請大家熟悉一下程式架構,直接從範例中學習是最快速的,熟悉了再自行變化即可。


上一篇
三十天全端學習(javascript、python、mongoDB)---第十六天:python tornado後台架設 (II)
下一篇
三十天全端學習(javascript、python、mongoDB)---第十八天:python tornado後台架設---實戰篇 II
系列文
三十天全端學習:透過javascript(Onsen UI)、python(tornado)、非關聯式資料庫(mongoDB)完成全端學習,建置web app、mobile app。30

尚未有邦友留言

立即登入留言