配套視頻教程
1、創建一個目錄,名為:microblog;
2、創建虛擬環境
C:\Users\Administrator>d:
D:\>cd D:\microblog
D:\microblog>python -m venv venv
D:\microblog>
3、激活虛擬環境:activate
D:\microblog>cd D:\microblog\venv\Scripts
D:\microblog\venv\Scripts>activate
(venv) D:\microblog\venv\Scripts>
注:退出虛擬環境 deactivate
4、安裝Flask:pip install flask
安裝指定版本的第三方庫可用命令:pip install flask==版本號
(venv) D:\microblog\venv\Scripts>pip install flask
Collecting flask
Using cached https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl
Collecting Werkzeug>=0.14 (from flask)
Using cached https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl
Collecting itsdangerous>=0.24 (from flask)
Using cached https://files.pythonhosted.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz
Collecting Jinja2>=2.10 (from flask)
Using cached https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl
Collecting click>=5.1 (from flask)
Using cached https://files.pythonhosted.org/packages/34/c1/8806f99713ddb993c5366c362b2f908f18269f8d792aff1abfd700775a77/click-6.7-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from Jinja2>=2.10->flask)
Using cached https://files.pythonhosted.org/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz
Installing collected packages: Werkzeug, itsdangerous, MarkupSafe, Jinja2, click, flask
Running setup.py install for itsdangerous ... done
Running setup.py install for MarkupSafe ... done
Successfully installed Jinja2-2.10 MarkupSafe-1.0 Werkzeug-0.14.1 click-6.7 flask-1.0.2 itsdangerous-0.24
可看到會附帶安裝好:Werkzeug, itsdangerous, MarkupSafe, Jinja2, click。
並可在目錄D:\microblogvenv\Lib\site-packages下查看到。
上述重要庫對應版本:
庫名 | 版本號 | 簡要說明 |
---|---|---|
flask | 1.0.2 | 內核 |
werkzeug | 0.14.1 | 核心1,路由模塊 |
jinja2 | 2.10 | 核心2,模板引擎 |
itsdangerous | 0.24 | (加密數據)簽名模塊 |
MarkupSafe | 0.23 | 為Python實現XML / HTML / XHTML 標記安全字符串 |
click | 5.1 | 命令行工具庫 |
以上的庫均由Armin Ronacher及其Flask團隊pallets開發編寫。
5、創建一個“Hello,World!” Flask應用程序
0)、該應用程序將存在於一個包(app)中。在Python中,包含init.py文件的子目錄被視為包,其可被導入。當導入一個包時,init.py將會執行並定義“暴露”給外部的標識(告訴你們,我是一個包 package)。
在D:\microblog下創建一個目錄,名為app。並寫一個init.py文件,表明app是一個包 package。
init.py,它將創建Flask應用程序實例,代碼如下:
from flask import Flask#從flask包中導入Flask類
app = Flask(__name__)#將Flask類的實例 賦值給名為 app 的變量。這個實例成為app包的成員。
#print('等會誰(哪個包或模塊)在使用我:',__name__)
from app import routes#從app包中導入模塊routes
#注:上面兩個app是完全不同的東西。兩者都是純粹約定俗成的命名,可重命名其他內容。
上述腳本只是創建了一個作為Flask類的實例的應用程序對象,Flask類是從flask包中導入的。傳遞給Flask類的變量name是一個Python預定義的變量,該變量設置為使用它的模塊的名字。可加入一句打印用於理解,如上(不用時注釋掉或刪除該行代碼)。當應用程序運行時,可看到打印的是包 app。
當需要加載如模板文件等相關資源時,Flask將使用此處傳遞的模塊的位置作為起點。
傳遞的變量name總是以正確的方式配置給Flask。
接着,從包 app中導入模塊routes,目前尚未編寫它。
還注意到:routes模塊是在腳本底部導入,而不是頂部,因為它始終是完成的。底部導入是避免循環導入(circular import)問題的解決方法。在接下來的routes模塊中,需要導入這個腳本(init.py)中的變量app,因此將其放置在底部導入,以避免由這倆個文件之間的相互引用引起的error。
1)、routes模塊
路由,是處理URL 和函數 之間關系的程序。使用route()裝飾器來把函數綁定到URL。
在Flask中,應用程序 路由的處理程序被編寫為Python函數,稱為 視圖函數,例此模塊中的index()。 視圖函數映射到一個或多個路由URL,以便Flask知道客戶端請求給定URL時要執行的邏輯(Python代碼)。
app/routes.py代碼:
from app import app#從app包中導入 app這個實例
#2個路由
@app.route('/')
@app.route('/index')
#1個視圖函數
def index():
return "Hello,World!"#返回一個字符串
@app.route
裝飾器 為作為一個參數給定的URL和函數之間創建關聯。代碼中有兩個裝飾器,它們共同將URL /
和 /index
關聯至index()
函數。這意味着當瀏覽器這倆個URL中任一個時,Flask將調用此函數(index()
)並將其返回值(字符串)作為響應 Response傳遞回瀏覽器。
2)、為完成這個簡單的應用程序,還需在頂層 top-level定義一個Flask應用程序實例 的Python腳本,命名為microblog.py,並僅有一行代碼,即導入應用程序實例。代碼如下:
from app import app#從app包中導入變量app(它是作為app包成員的變量)
目前為止,項目結構圖:
microblog/
venv/
app/
__init__.py
routes.py
microblog.py
3)運行程序。
運行之前,設置FLASK_APP
環境變量,它會告訴Flask如何導入剛寫的應用程序。
(venv) D:\microblog\venv\Scripts>cd D:\microblog
(venv) D:\microblog>set FLASK_APP=microblog.py
使用命令 flask run
運行程序:
(venv) D:\microblog>flask run
* Serving Flask app "microblog.py"
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [02/Aug/2018 16:36:28] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [02/Aug/2018 16:36:29] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [02/Aug/2018 16:36:41] "GET /index HTTP/1.1" 200 -
服務器初始化后,它將等待客戶端鏈接。flask run
命令指示服務器在IP地址127.0.0.1上運行,也即 localhost。
網絡服務器偵聽特定端口號上的連接。部署在生產Web服務器上的應用程序通常偵聽端口443(若未實施加密,可能是偵聽80),但訪問這些端口需要管理權限。上述應用程序是開發環境中運行,Flask將使用免費提供的端口5000。瀏覽器地址欄輸入如下URL並回車:
http://localhost:5000/
或使用其他URL:
http://localhost:5000/index
注:環境變量不會在終端中被記住,比如打開新的終端窗口時,得重新設置它。不過,Flask允許注冊 在運行flask 命令時要自動導入的環境變量。要使用這個選項,得安裝python-dotenv包:
(venv) D:\microblog>pip install python-dotenv
然后,在項目的頂級目錄中創建一個.env
文件(如microblog/microblog.env),文件中編寫環境變量名稱、值:
FLASK_APP=microblog.py
參考
https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world