您好,登錄后才能下訂單哦!
Flask Web開發實戰學習筆記
Flask簡介
Flask是使用Python編寫的Web微框架。Web框架可以讓我們不用關 心底層的請求響應處理,更方便高效地編寫Web程序。因為Flask核心簡 單且易于擴展,所以被稱作微框架(micro framework)。Flask有兩個主 要依賴,一個是WSGI(Web Server Gateway Interface,Web服務器網關 接口)工具集——Werkzeug(http://werkzeug.pocoo.org/),另一個是 Jinja2模板引擎(http://jinja.pocoo.org/)。Flask只保留了Web開發的核心 功能,其他的功能都由外部擴展來實現,比如數據庫集成、表單認證、 文件上傳等。如果沒有合適的擴展,你甚至可以自己動手開發。Flask不 會替你做決定,也不會限制你的選擇。總之,Flask可以變成任何你想要 的東西,一切都由你做主。
git管理代碼
$ git clone https://github.com/greyli/helloflask.git $ cd helloflask
1.1搭建開發環境
1.1.1 Pipenv工作流
PyPI(https://pypi.org)是一個Python包的在線倉庫,截至2018年5 月,共有13萬多個包存儲在這里。后面我們會學習如何編寫自己的Flask 擴展,并把它上傳到PyPI上。到時你就可以使用上面這條命令安裝自己 編寫的包。
現在使用pip安裝Pipenv:
$ pip install pipenv
在Linux或macOS系統中使用sudo以全局安裝:
$ sudo pip install pipenv
可以使用下面的命令檢查Pipenv是否已經安裝:
$ pipenv --version
1.創建虛擬環境
$ pipenv install
Creating a virtualenv for this project…
...
Virtualenv location: /path/to/virtualenv/helloflask-5Pa0ZfZw
...
附注:
默認情況下,Pipenv會統一管理所有虛擬環境。在Windows系統 中,虛擬環境文件夾會在C:\Users\Administrator\.virtualenvs\目錄下創 建,而Linux或macOS會在~/.local/share/virtualenvs/目錄下創建。如果你 想在項目目錄內創建虛擬環境文件夾,可以設置環境變量 PIPENV_VENV_IN_PROJECT,這時名為.venv的虛擬環境文件夾將在 項目根目錄被創建。
虛擬環境文件夾的目錄名稱的形式為“當前項目目錄名+一串隨機字 符”,比如helloflask-5Pa0ZfZw。
在單獨使用Virtualenv時,我們通常會顯式地激活虛擬環境。在 Pipenv中,可以使用pipenv shell命令顯式地激活虛擬環境:
$ pipenv shell
Loading .env environment variables…
Launching subshell in virtual environment. Type 'exit' to return.
提示:
當執行pipenv shell或pipenv run命令時,Pipenv會自動從項目目錄下 的.env文件中加載環境變量。 Pipenv會啟動一個激活虛擬環境的子shell,現在你會發現命令行提 示符前添加了虛擬環境名“(虛擬環境名稱)$”,比如:
(helloflask-5Pa0ZfZw) $
這說明我們已經成功激活了虛擬環境,現在你的所有命令都會在虛 擬環境中執行。當你需要退出虛擬環境時,使用exit命令。
除了顯式地激活虛擬環境,Pipenv還提供了一個pipenv run命令,這 個命令允許你不顯式激活虛擬環境即可在當前項目的虛擬環境中執行命 令,比如:
$ pipenv run python hello.py
這會使用虛擬環境中的Python解釋器,而不是全局的Python解釋器
2.管理依賴
在創建虛擬環境時,如果項目根目錄下沒有Pipfile文件,pipenv install命令還會在項目文件夾根目錄下創建Pipfile和Pipfile.lock文件,前 者用來記錄項目依賴包列表,而后者記錄了固定版本的詳細依賴包列 表。當我們使用Pipenv安裝/刪除/更新依賴包時,Pipfile以及Pipfile.lock 會自動更新。
1.1.2 安裝Flask
$ pipenv install flask
Installing flask...
... Successfully installed Jinja2-2.10 MarkupSafe-1.0 Werkzeug-0.14.1 click-6.7
本文章使用了最新版本的Flask(1.0.2),如果你還在使用舊版本,請 使用下面的命令進行更新:
$ pipenv update flask
1.2 hello flask
使 用下面的命令切換到該目錄:
$ cd demos/hello
在hello目錄下的app.py腳本中包含一個最小的Flask程序,如代碼清 單1-1所示。 代碼清單1-1 hello/app.py:最小的Flask程序
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return '<h2>Hello Flask!</h2>'
1.2.1 創建程序實例
我們安裝Flask時,它會在Python解釋器中創建一個flask包,我們可 以通過flask包的構造文件導入所有開放的類和函數。我們先從flask包導 入Flask類,這個類表示一個Flask程序。實例化這個類,就得到我們的
程序實例app:
from flask import Flask app = Flask(__name__)
傳入Flask類構造方法的第一個參數是模塊或包的名稱,我們應該使 用特殊變量__name__。Python會根據所處的模塊來賦予__name__變量相 應的值,對于我們的程序來說(app.py),這個值為app。除此之外,這 也會幫助Flask在相應的文件夾里找到需要的資源,比如模板和靜態文 件。
提示
Flask類是Flask的核心類,它提供了很多與程序相關的屬性和方 法。在后面,我們經常會直接在程序實例app上調用這些屬性和方法來 實現相關功能。在第一次提及Flask類中的某個方法或屬性時,我們會直 接以實例方法/屬性的形式寫出,比如存儲程序名稱的屬性為app.name。
1.2.2 注冊路由
在一個Web應用里,客戶端和服務器上的Flask程序的交互可以簡單 概括為以下幾步:
1)用戶在瀏覽器輸入URL訪問某個資源。
2)Flask接收用戶請求并分析請求的URL。
3)為這個URL找到對應的處理函數。
4)執行函數并生成響應,返回給瀏覽器。
5)瀏覽器接收并解析響應,將信息顯示在頁面中。
在上面這些步驟中,大部分都由Flask完成,我們要做的只是建立處 理請求的函數,并為其定義對應的URL規則。只需為函數附加 app.route()裝飾器,并傳入URL規則作為參數,我們就可以讓URL與函數建立關聯。這個過程我們稱為注冊路由(route),路由負責管理 URL和函數之間的映射,而這個函數則被稱為視圖函數(view function)。
操作:
在這個程序里,app.route()裝飾器把根地址/和index()函數綁 定起來,當用戶訪問這個URL時就會觸發index()函數。這個視圖函 數可以像其他普通函數一樣執行任意操作,比如從數據庫中獲取信息, 獲取請求信息,對用戶輸入的數據進行計算和處理等。最后,視圖函數 返回的值將作為響應的主體,一般來說,響應的主體就是呈現在瀏覽器 窗口的HTML頁面。在最小程序中,視圖函數index()返回一行問候:
@app.route('/') def index(): return '<h2>Hello, World!</h2>'
雖然這個程序相當簡單,但它卻是大部分Flask程序的基本模式。在 復雜的程序中,我們會有許多個視圖函數分別處理不同URL的請求,在 視圖函數中會完成更多的工作,并且返回包含各種鏈接、表單、圖片的 HTML文件,而不僅僅是一行字符串。返回的頁面中的鏈接又會指向其 他URL,被單擊后觸發對應的視圖函數,獲得不同的返回值,從而顯示 不同的頁面,這就是我們瀏覽網頁時的體驗。
提示
route()裝飾器的第一個參數是URL規則,用字符串表示,必須以 斜杠(/)開始。這里的URL是相對URL(又稱為內部URL),即不包 含域名的URL。以域名www.helloflask.com為例,“/”對應的是根地址 (即www.helloflask.com),如果把URL規則改為“/hello”,則實際的絕 對地址(外部地址)是www.helloflask.com/hello。 假如這個程序部署在域名為www.helloflask.com的服務器上,當啟 動服務器后,只要你在瀏覽器里訪問www.helloflask.com,就會看到瀏覽器上顯示一行“Hello,Flask!”問候。
1.為視圖綁定多個URL
@app.route('/hi') @app.route('/hello') def say_hello(): return '<h2>Hello, Flask!</h2>'
2.動態URL
@app.route('/greet/<name>') def greet(name): return '<h2>Hello, %s!</h2>' % name
附注:
當URL規則中包含變量時,如果用戶訪問的URL中沒有添加變量, 比如/greet,那么Flask在匹配失敗后會返回一個404錯誤響應。一個很常 見的行為是在app.route()裝飾器里使用defaults參數設置URL變量的默 認值,這個參數接收字典作為輸入,存儲URL變量和默認值的映射。在 下面的代碼中,我們為greet視圖新添加了一個app.route()裝飾器, 為/greet設置了默認的name值:
@app.route('/greet', defaults={'name': 'Programmer'}) @app.route('/greet/<name>') def greet(name): return '<h2>Hello, %s!</h2>' % name
這時如果用戶訪問/greet,那么變量name會使用默認值 Programmer,視圖函數返回<h2>Hello,Programmer!</h2>。上面的用 法實際效果等同于:
@app.route('/greet') @app.route('/greet/<name>') def greet(name='Programmer'): return '<h2>Hello, %s!</h2>' % name
1.3 啟動開發服務器
$ flask run * 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)
注意:
如果報這個錯誤!
Error: Could not locate a Flask application. You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" or "app.py" module was not found in the current directory.
那就是路徑沒有切到flask 的app.py目錄下!
總結
以上所述是小編給大家介紹的python flask安裝和命令詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。