python flask安装_python flask安装和命令详解
Flask Web開(kāi)發(fā)實(shí)戰(zhàn)學(xué)習(xí)筆記
Flask簡(jiǎn)介
Flask是使用Python編寫(xiě)的Web微框架。Web框架可以讓我們不用關(guān) 心底層的請(qǐng)求響應(yīng)處理,更方便高效地編寫(xiě)Web程序。因?yàn)镕lask核心簡(jiǎn) 單且易于擴(kuò)展,所以被稱(chēng)作微框架(micro framework)。Flask有兩個(gè)主 要依賴(lài),一個(gè)是WSGI(Web Server Gateway Interface,Web服務(wù)器網(wǎng)關(guān) 接口)工具集——Werkzeug(http://werkzeug.pocoo.org/),另一個(gè)是 Jinja2模板引擎(http://jinja.pocoo.org/)。Flask只保留了Web開(kāi)發(fā)的核心 功能,其他的功能都由外部擴(kuò)展來(lái)實(shí)現(xiàn),比如數(shù)據(jù)庫(kù)集成、表單認(rèn)證、 文件上傳等。如果沒(méi)有合適的擴(kuò)展,你甚至可以自己動(dòng)手開(kāi)發(fā)。Flask不 會(huì)替你做決定,也不會(huì)限制你的選擇。總之,Flask可以變成任何你想要 的東西,一切都由你做主。
git管理代碼
$ git clone https://github.com/greyli/helloflask.git
$ cd helloflask
1.1搭建開(kāi)發(fā)環(huán)境
1.1.1 Pipenv工作流
PyPI(https://pypi.org)是一個(gè)Python包的在線(xiàn)倉(cāng)庫(kù),截至2018年5 月,共有13萬(wàn)多個(gè)包存儲(chǔ)在這里。后面我們會(huì)學(xué)習(xí)如何編寫(xiě)自己的Flask 擴(kuò)展,并把它上傳到PyPI上。到時(shí)你就可以使用上面這條命令安裝自己 編寫(xiě)的包。
現(xiàn)在使用pip安裝Pipenv:
$ pip install pipenv
在Linux或macOS系統(tǒng)中使用sudo以全局安裝:
$ sudo pip install pipenv
可以使用下面的命令檢查Pipenv是否已經(jīng)安裝:
$ pipenv --version
1.創(chuàng)建虛擬環(huán)境
$ pipenv install
Creating a virtualenv for this project…
...
Virtualenv location: /path/to/virtualenv/helloflask-5Pa0ZfZw
...
附注:
默認(rèn)情況下,Pipenv會(huì)統(tǒng)一管理所有虛擬環(huán)境。在Windows系統(tǒng) 中,虛擬環(huán)境文件夾會(huì)在C:\Users\Administrator\.virtualenvs\目錄下創(chuàng) 建,而Linux或macOS會(huì)在~/.local/share/virtualenvs/目錄下創(chuàng)建。如果你 想在項(xiàng)目目錄內(nèi)創(chuàng)建虛擬環(huán)境文件夾,可以設(shè)置環(huán)境變量 PIPENV_VENV_IN_PROJECT,這時(shí)名為.venv的虛擬環(huán)境文件夾將在 項(xiàng)目根目錄被創(chuàng)建。
虛擬環(huán)境文件夾的目錄名稱(chēng)的形式為“當(dāng)前項(xiàng)目目錄名+一串隨機(jī)字 符”,比如helloflask-5Pa0ZfZw。
在單獨(dú)使用Virtualenv時(shí),我們通常會(huì)顯式地激活虛擬環(huán)境。在 Pipenv中,可以使用pipenv shell命令顯式地激活虛擬環(huán)境:
$ pipenv shell
Loading .env environment variables…
Launching subshell in virtual environment. Type 'exit' to return.
提示:
當(dāng)執(zhí)行pipenv shell或pipenv run命令時(shí),Pipenv會(huì)自動(dòng)從項(xiàng)目目錄下 的.env文件中加載環(huán)境變量。 Pipenv會(huì)啟動(dòng)一個(gè)激活虛擬環(huán)境的子shell,現(xiàn)在你會(huì)發(fā)現(xiàn)命令行提 示符前添加了虛擬環(huán)境名“(虛擬環(huán)境名稱(chēng))$”,比如:
(helloflask-5Pa0ZfZw) $
這說(shuō)明我們已經(jīng)成功激活了虛擬環(huán)境,現(xiàn)在你的所有命令都會(huì)在虛 擬環(huán)境中執(zhí)行。當(dāng)你需要退出虛擬環(huán)境時(shí),使用exit命令。
除了顯式地激活虛擬環(huán)境,Pipenv還提供了一個(gè)pipenv run命令,這 個(gè)命令允許你不顯式激活虛擬環(huán)境即可在當(dāng)前項(xiàng)目的虛擬環(huán)境中執(zhí)行命 令,比如:
$ pipenv run python hello.py
這會(huì)使用虛擬環(huán)境中的Python解釋器,而不是全局的Python解釋器
2.管理依賴(lài)
在創(chuàng)建虛擬環(huán)境時(shí),如果項(xiàng)目根目錄下沒(méi)有Pipfile文件,pipenv install命令還會(huì)在項(xiàng)目文件夾根目錄下創(chuàng)建Pipfile和Pipfile.lock文件,前 者用來(lái)記錄項(xiàng)目依賴(lài)包列表,而后者記錄了固定版本的詳細(xì)依賴(lài)包列 表。當(dāng)我們使用Pipenv安裝/刪除/更新依賴(lài)包時(shí),Pipfile以及Pipfile.lock 會(huì)自動(dòng)更新。
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),如果你還在使用舊版本,請(qǐng) 使用下面的命令進(jìn)行更新:
$ pipenv update flask
1.2? hello flask
使 用下面的命令切換到該目錄:
$ cd demos/hello
在hello目錄下的app.py腳本中包含一個(gè)最小的Flask程序,如代碼清 單1-1所示。 代碼清單1-1 hello/app.py:最小的Flask程序
from flask import Flask app = Flask(__name__)
@app.route('/') def index(): return '
Hello Flask!
'1.2.1 創(chuàng)建程序?qū)嵗?/p>
我們安裝Flask時(shí),它會(huì)在Python解釋器中創(chuàng)建一個(gè)flask包,我們可 以通過(guò)flask包的構(gòu)造文件導(dǎo)入所有開(kāi)放的類(lèi)和函數(shù)。我們先從flask包導(dǎo) 入Flask類(lèi),這個(gè)類(lèi)表示一個(gè)Flask程序。實(shí)例化這個(gè)類(lèi),就得到我們的
程序?qū)嵗齛pp:
from flask import Flask
app = Flask(__name__)
傳入Flask類(lèi)構(gòu)造方法的第一個(gè)參數(shù)是模塊或包的名稱(chēng),我們應(yīng)該使 用特殊變量__name__。Python會(huì)根據(jù)所處的模塊來(lái)賦予__name__變量相 應(yīng)的值,對(duì)于我們的程序來(lái)說(shuō)(app.py),這個(gè)值為app。除此之外,這 也會(huì)幫助Flask在相應(yīng)的文件夾里找到需要的資源,比如模板和靜態(tài)文 件。
提示
Flask類(lèi)是Flask的核心類(lèi),它提供了很多與程序相關(guān)的屬性和方 法。在后面,我們經(jīng)常會(huì)直接在程序?qū)嵗齛pp上調(diào)用這些屬性和方法來(lái) 實(shí)現(xiàn)相關(guān)功能。在第一次提及Flask類(lèi)中的某個(gè)方法或?qū)傩詴r(shí),我們會(huì)直 接以實(shí)例方法/屬性的形式寫(xiě)出,比如存儲(chǔ)程序名稱(chēng)的屬性為app.name。
1.2.2 注冊(cè)路由
在一個(gè)Web應(yīng)用里,客戶(hù)端和服務(wù)器上的Flask程序的交互可以簡(jiǎn)單 概括為以下幾步:
1)用戶(hù)在瀏覽器輸入U(xiǎn)RL訪(fǎng)問(wèn)某個(gè)資源。
2)Flask接收用戶(hù)請(qǐng)求并分析請(qǐng)求的URL。
3)為這個(gè)URL找到對(duì)應(yīng)的處理函數(shù)。
4)執(zhí)行函數(shù)并生成響應(yīng),返回給瀏覽器。
5)瀏覽器接收并解析響應(yīng),將信息顯示在頁(yè)面中。
在上面這些步驟中,大部分都由Flask完成,我們要做的只是建立處 理請(qǐng)求的函數(shù),并為其定義對(duì)應(yīng)的URL規(guī)則。只需為函數(shù)附加 app.route()裝飾器,并傳入U(xiǎn)RL規(guī)則作為參數(shù),我們就可以讓URL與函數(shù)建立關(guān)聯(lián)。這個(gè)過(guò)程我們稱(chēng)為注冊(cè)路由(route),路由負(fù)責(zé)管理 URL和函數(shù)之間的映射,而這個(gè)函數(shù)則被稱(chēng)為視圖函數(shù)(view function)。
操作:
在這個(gè)程序里,app.route()裝飾器把根地址/和index()函數(shù)綁 定起來(lái),當(dāng)用戶(hù)訪(fǎng)問(wèn)這個(gè)URL時(shí)就會(huì)觸發(fā)index()函數(shù)。這個(gè)視圖函 數(shù)可以像其他普通函數(shù)一樣執(zhí)行任意操作,比如從數(shù)據(jù)庫(kù)中獲取信息, 獲取請(qǐng)求信息,對(duì)用戶(hù)輸入的數(shù)據(jù)進(jìn)行計(jì)算和處理等。最后,視圖函數(shù) 返回的值將作為響應(yīng)的主體,一般來(lái)說(shuō),響應(yīng)的主體就是呈現(xiàn)在瀏覽器 窗口的HTML頁(yè)面。在最小程序中,視圖函數(shù)index()返回一行問(wèn)候:
@app.route('/') def index(): return '
Hello, World!
'雖然這個(gè)程序相當(dāng)簡(jiǎn)單,但它卻是大部分Flask程序的基本模式。在 復(fù)雜的程序中,我們會(huì)有許多個(gè)視圖函數(shù)分別處理不同URL的請(qǐng)求,在 視圖函數(shù)中會(huì)完成更多的工作,并且返回包含各種鏈接、表單、圖片的 HTML文件,而不僅僅是一行字符串。返回的頁(yè)面中的鏈接又會(huì)指向其 他URL,被單擊后觸發(fā)對(duì)應(yīng)的視圖函數(shù),獲得不同的返回值,從而顯示 不同的頁(yè)面,這就是我們?yōu)g覽網(wǎng)頁(yè)時(shí)的體驗(yàn)。
提示
route()裝飾器的第一個(gè)參數(shù)是URL規(guī)則,用字符串表示,必須以 斜杠(/)開(kāi)始。這里的URL是相對(duì)URL(又稱(chēng)為內(nèi)部URL),即不包 含域名的URL。以域名www.helloflask.com為例,“/”對(duì)應(yīng)的是根地址 (即www.helloflask.com),如果把URL規(guī)則改為“/hello”,則實(shí)際的絕 對(duì)地址(外部地址)是www.helloflask.com/hello。 假如這個(gè)程序部署在域名為www.helloflask.com的服務(wù)器上,當(dāng)啟 動(dòng)服務(wù)器后,只要你在瀏覽器里訪(fǎng)問(wèn)www.helloflask.com,就會(huì)看到瀏覽器上顯示一行“Hello,Flask!”問(wèn)候。
1.為視圖綁定多個(gè)URL
@app.route('/hi')
@app.route('/hello')
def say_hello():
return '
Hello, Flask!
'2.動(dòng)態(tài)URL
@app.route('/greet/')
def greet(name):
return '
Hello, %s!
' % name附注:
當(dāng)URL規(guī)則中包含變量時(shí),如果用戶(hù)訪(fǎng)問(wèn)的URL中沒(méi)有添加變量, 比如/greet,那么Flask在匹配失敗后會(huì)返回一個(gè)404錯(cuò)誤響應(yīng)。一個(gè)很常 見(jiàn)的行為是在app.route()裝飾器里使用defaults參數(shù)設(shè)置URL變量的默 認(rèn)值,這個(gè)參數(shù)接收字典作為輸入,存儲(chǔ)URL變量和默認(rèn)值的映射。在 下面的代碼中,我們?yōu)間reet視圖新添加了一個(gè)app.route()裝飾器, 為/greet設(shè)置了默認(rèn)的name值:
@app.route('/greet', defaults={'name': 'Programmer'})
@app.route('/greet/')
def greet(name):
return '
Hello, %s!
' % name這時(shí)如果用戶(hù)訪(fǎng)問(wèn)/greet,那么變量name會(huì)使用默認(rèn)值 Programmer,視圖函數(shù)返回
Hello,Programmer!
。上面的用 法實(shí)際效果等同于:@app.route('/greet')
@app.route('/greet/')
def greet(name='Programmer'):
return '
Hello, %s!
' % name1.3 啟動(dòng)開(kāi)發(fā)服務(wù)器
$ 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)
注意:
如果報(bào)這個(gè)錯(cuò)誤!
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.
那就是路徑?jīng)]有切到flask 的app.py目錄下!
總結(jié)
以上所述是小編給大家介紹的python flask安裝和命令詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的python flask安装_python flask安装和命令详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 多媒体技术基础及应用
- 下一篇: 微软开放Xbox 360游戏开发平台