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代碼)。

image.png

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM