1. 程式人生 > 實用技巧 >06.flask部落格專案實戰一之專案框架搭建

06.flask部落格專案實戰一之專案框架搭建

配套視訊教程

本文B站配套視訊教程

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

python-dotenv文件

參考
https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world