沉浸c語言多年,從沒接觸過python,這次從廖學鋒老師的python教程結合《Flask Web開發:基于Python的Web應用開發實戰》這本書記錄一下學習中的過程和問題,僅作個人學習記錄用。
(原書說道:“本書的目的是幫助你完成工作。一般來說,你可以在自己的程式或者文檔中使用本書附帶
的示例代碼。你無需聯系我們獲得使用許可,除非你要複制大量的代碼。”另附署名:Flask Web Development by Miguel Grinberg (O’Reilly). Copyright 2014 Miguel Grinberg, 978-1-449-3726-2)
一、python3.6的安裝
參照廖老師的這章安裝。
二、使用虛拟環境
書中原話:
Python 3.3 通過 venv 子產品原生支援虛拟環境,指令為 pyvenv 。 pyvenv 可以替
代 virtualenv 。不過要注意,在 Python 3.3 中使用 pyvenv 指令建立的虛拟環
境不包含 pip ,你需要進行手動安裝。Python 3.4 改進了這一缺陷, pyvenv 完
全可以代替 virtualenv 。
這裡,借鑒這個連結Windows下用Python 3.4+自帶的venv子產品建立虛拟環境來建立。啟動虛拟環境之後,進入建立的那個虛拟環境所在的目錄(就是Scripts所在的那個目錄),輸入
pip install flask
安裝flask,安裝完後:
(test) E:\test-venv\test>python
Python (v3:df79263a11, Dec , ::) [MSC v bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import flask
>>>
沒出現錯誤提醒,則flask安裝完畢。
使用
$ git clone https://github.com/miguelgrinberg/flasky.git
$ cd flasky
$ git checkout 1a
簽出程式初始版本。
三、程式的基本結構
在E:\test-venv\test目錄下,shift+右鍵打開指令行,輸入
Scripts\activate.bat
再次激活虛拟環境
E:\test-venv\test>Scripts\activate.bat
(test) E:\test-venv\test>python
Python (v3:df79263a11, Dec , ::) [MSC v bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import flask
>>>

繼續昨天的學習。
3-1初始化
原書說道:
所有 Flask 程式都必須建立一個程式執行個體。Web 伺服器使用一種名為 Web 伺服器網關接口
(Web Server Gateway Interface,WSGI)的協定,把接收自用戶端的所有請求都轉交給這
個對象處理。程式執行個體是 Flask 類的對象,經常使用下述代碼建立:
from flask import Flask
app = Flask(__name__)
Flask 類的構造函數隻有一個必須指定的參數,即程式主子產品或包的名字。在大多數程式 中,Python 的 name變量就是所需的值。 将構造函數的 name 參數傳給 Flask 程式,這一點可能會讓 Flask 開發新手心生迷惑。Flask用這個參數決定程式的根目錄,以便稍後能夠找到相對于程 序根目錄的資源檔案位置。
3-2路由和視圖函數
原書在這小節每句話我都覺得很重要:
用戶端(例如 Web 浏覽器)把請求發送給 Web 伺服器,Web 伺服器再把請求發送給 Flask 程式執行個體。程式執行個體需要知道對每個 URL 請求運作哪些代碼,是以儲存了一個 URL 到 Python 函數的映射關系。處理 URL和函數之間關系的程式稱為路由。 在 Flask 程式中定義路由的最簡便方式,是使用程式執行個體提供的 app.route 修飾器,把修飾的函數注冊為路由。下面的例子說明了如何使用這個修飾器聲明路由:
@app.route('/')
def index():
return '<h1>Hello World!</h1>'
修飾器是 Python 語言的标準特性,可以使用不同的方式修改函數的行為。慣常用法是使用修飾器把函數注冊為事件的處理程式。 前例把
index() 函數注冊為程式根位址的處理程式。
如果部署程式的伺服器域名為 www. example.com,在浏覽器中通路 http://www.example.com 後,會觸發伺服器執行 index() 函數。這個函數的傳回值稱為響應,是用戶端接收到的内容。如果用戶端是 Web 浏覽器,響應就是顯示給使用者檢視的文檔。 像 index()這樣的函數稱為視圖函數(view function)。視圖函數傳回的響應可以是包含 HTML 的簡單字元串,也可以是複雜的表單,後文會介紹。 在 Python 代碼中嵌入響應字元串會導緻代碼難以維護,此處這麼做隻是為了 介紹響應的概念。你将在第 3 章了解生成響應的正确方法。
如果你仔細觀察日常所用服務的某些 URL 格式,會發現很多位址中都包含可變部分。例 如, 你 的 Facebook 資 料 頁 面 的 位址 是http://www.facebook.com/< your-name>, 用 戶 名(your-name)是位址的一部分。Flask 支援這種形式的 URL,隻需在 route 修飾器中使用特殊的句法即可。下例定義的路由中就有一部分是動态名字:
> @app.route('/user/<name>')
> def user(name):
> return '<h1>Hello, %s!</h1>' % name
尖括号中的内容就是動态部分,任何能比對靜态部分的 URL都會映射到這個路由上。調用視圖函數時,Flask 會将動态部分作為參數傳入函數。在這個視圖函數中,參數用于生成針對個人的歡迎消息。
路由中的動态部分預設使用字元串,不過也可使用類型定義。例如,路由 /user/ 隻會比對動态片段 id 為整數的 URL。Flask 支援在路由中使用 int 、 float 和 path 類型。 path類型也是字元串,但不把斜線視作分隔符,而将其當作動态片段的一部分。
3-3啟動伺服器
原話:
程式執行個體用 run 方法啟動 Flask 內建的開發 Web 伺服器:
if __name__ == '__main__':
app.run(debug=True)
name== ’ main ’ 是 Python 的慣常用法,在這裡確定直接執行這個腳本時才啟動開發 Web 伺服器。如果這個腳本由其他腳本引入,程式假定父級腳本會啟動不同的伺服器,是以不會執行 app.run() 。伺服器啟動後,會進入輪詢,等待并處理請求。輪詢會一直運作,直到程式停止,比如按 Ctrl-C 鍵。 有一些選項參數可被 app.run()函數接受用于設定 Web 伺服器的操作模式。在開發過程中 啟用調試模式會帶來一些便利,比如說激活調試器和重載程式。要想啟用調試模式,我們可以把 debug 參數設為 True 。
3-4一個完整的程式
簽出2a版本。
然後
浏覽器打開127.0.0.1:5000就可以看到
接下來試一下添加動态路由的程式(2b版本),比對一下兩次使用的代碼
2a:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '<h1>Hello World!</h1>'
if __name__ == '__main__':
app.run(debug=True)
2b:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '<h1>Hello World!</h1>'
@app.route('/user/<name>')
def user(name):
return '<h1>Hello, %s!</h1>' % name
if __name__ == '__main__':
app.run(debug=True)
Ctrl+C退出上個程式,再運作2b版本: