溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python flask安裝和命令詳解

發(fā)布時間:2020-10-17 16:23:50 來源:腳本之家 閱讀:158 作者:舉幾個栗子 欄目:開發(fā)技術(shù)

Flask Web開發(fā)實戰(zhàn)學習筆記

Flask簡介

Flask是使用Python編寫的Web微框架。Web框架可以讓我們不用關(guān) 心底層的請求響應處理,更方便高效地編寫Web程序。因為Flask核心簡 單且易于擴展,所以被稱作微框架(micro framework)。Flask有兩個主 要依賴,一個是WSGI(Web Server Gateway Interface,Web服務器網(wǎng)關(guān) 接口)工具集——Werkzeug(http://werkzeug.pocoo.org/),另一個是 Jinja2模板引擎(http://jinja.pocoo.org/)。Flask只保留了Web開發(fā)的核心 功能,其他的功能都由外部擴展來實現(xiàn),比如數(shù)據(jù)庫集成、表單認證、 文件上傳等。如果沒有合適的擴展,你甚至可以自己動手開發(fā)。Flask不 會替你做決定,也不會限制你的選擇??傊?,F(xiàn)lask可以變成任何你想要 的東西,一切都由你做主。

git管理代碼

$ git clone https://github.com/greyli/helloflask.git
$ cd helloflask

1.1搭建開發(fā)環(huán)境

1.1.1 Pipenv工作流

PyPI(https://pypi.org)是一個Python包的在線倉庫,截至2018年5 月,共有13萬多個包存儲在這里。后面我們會學習如何編寫自己的Flask 擴展,并把它上傳到PyPI上。到時你就可以使用上面這條命令安裝自己 編寫的包。

現(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

 ...

附注:

默認情況下,Pipenv會統(tǒng)一管理所有虛擬環(huán)境。在Windows系統(tǒng) 中,虛擬環(huán)境文件夾會在C:\Users\Administrator\.virtualenvs\目錄下創(chuàng) 建,而Linux或macOS會在~/.local/share/virtualenvs/目錄下創(chuàng)建。如果你 想在項目目錄內(nèi)創(chuàng)建虛擬環(huán)境文件夾,可以設置環(huán)境變量 PIPENV_VENV_IN_PROJECT,這時名為.venv的虛擬環(huán)境文件夾將在 項目根目錄被創(chuàng)建。

虛擬環(huán)境文件夾的目錄名稱的形式為“當前項目目錄名+一串隨機字 符”,比如helloflask-5Pa0ZfZw。

在單獨使用Virtualenv時,我們通常會顯式地激活虛擬環(huán)境。在 Pipenv中,可以使用pipenv shell命令顯式地激活虛擬環(huán)境:

$ pipenv shell

Loading .env environment variables…

Launching subshell in virtual environment. Type 'exit' to return.

提示:

當執(zhí)行pipenv shell或pipenv run命令時,Pipenv會自動從項目目錄下 的.env文件中加載環(huán)境變量。 Pipenv會啟動一個激活虛擬環(huán)境的子shell,現(xiàn)在你會發(fā)現(xiàn)命令行提 示符前添加了虛擬環(huán)境名“(虛擬環(huán)境名稱)$”,比如:

(helloflask-5Pa0ZfZw) $

這說明我們已經(jīng)成功激活了虛擬環(huán)境,現(xiàn)在你的所有命令都會在虛 擬環(huán)境中執(zhí)行。當你需要退出虛擬環(huán)境時,使用exit命令。

除了顯式地激活虛擬環(huán)境,Pipenv還提供了一個pipenv run命令,這 個命令允許你不顯式激活虛擬環(huán)境即可在當前項目的虛擬環(huán)境中執(zhí)行命 令,比如:

$ pipenv run python hello.py

這會使用虛擬環(huán)境中的Python解釋器,而不是全局的Python解釋器

2.管理依賴

在創(chuàng)建虛擬環(huán)境時,如果項目根目錄下沒有Pipfile文件,pipenv install命令還會在項目文件夾根目錄下創(chuàng)建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 創(chuàng)建程序?qū)嵗?/strong>


我們安裝Flask時,它會在Python解釋器中創(chuàng)建一個flask包,我們可 以通過flask包的構(gòu)造文件導入所有開放的類和函數(shù)。我們先從flask包導 入Flask類,這個類表示一個Flask程序。實例化這個類,就得到我們的

程序?qū)嵗齛pp:

from flask import Flask
app = Flask(__name__)

傳入Flask類構(gòu)造方法的第一個參數(shù)是模塊或包的名稱,我們應該使 用特殊變量__name__。Python會根據(jù)所處的模塊來賦予__name__變量相 應的值,對于我們的程序來說(app.py),這個值為app。除此之外,這 也會幫助Flask在相應的文件夾里找到需要的資源,比如模板和靜態(tài)文 件。

提示

Flask類是Flask的核心類,它提供了很多與程序相關(guān)的屬性和方 法。在后面,我們經(jīng)常會直接在程序?qū)嵗齛pp上調(diào)用這些屬性和方法來 實現(xiàn)相關(guān)功能。在第一次提及Flask類中的某個方法或?qū)傩詴r,我們會直 接以實例方法/屬性的形式寫出,比如存儲程序名稱的屬性為app.name。

1.2.2 注冊路由

在一個Web應用里,客戶端和服務器上的Flask程序的交互可以簡單 概括為以下幾步:

1)用戶在瀏覽器輸入URL訪問某個資源。

2)Flask接收用戶請求并分析請求的URL。

3)為這個URL找到對應的處理函數(shù)。

4)執(zhí)行函數(shù)并生成響應,返回給瀏覽器。

 5)瀏覽器接收并解析響應,將信息顯示在頁面中。

 在上面這些步驟中,大部分都由Flask完成,我們要做的只是建立處 理請求的函數(shù),并為其定義對應的URL規(guī)則。只需為函數(shù)附加 app.route()裝飾器,并傳入URL規(guī)則作為參數(shù),我們就可以讓URL與函數(shù)建立關(guān)聯(lián)。這個過程我們稱為注冊路由(route),路由負責管理 URL和函數(shù)之間的映射,而這個函數(shù)則被稱為視圖函數(shù)(view function)。

操作:

在這個程序里,app.route()裝飾器把根地址/和index()函數(shù)綁 定起來,當用戶訪問這個URL時就會觸發(fā)index()函數(shù)。這個視圖函 數(shù)可以像其他普通函數(shù)一樣執(zhí)行任意操作,比如從數(shù)據(jù)庫中獲取信息, 獲取請求信息,對用戶輸入的數(shù)據(jù)進行計算和處理等。最后,視圖函數(shù) 返回的值將作為響應的主體,一般來說,響應的主體就是呈現(xiàn)在瀏覽器 窗口的HTML頁面。在最小程序中,視圖函數(shù)index()返回一行問候:

@app.route('/') def index(): return '<h2>Hello, World!</h2>'

雖然這個程序相當簡單,但它卻是大部分Flask程序的基本模式。在 復雜的程序中,我們會有許多個視圖函數(shù)分別處理不同URL的請求,在 視圖函數(shù)中會完成更多的工作,并且返回包含各種鏈接、表單、圖片的 HTML文件,而不僅僅是一行字符串。返回的頁面中的鏈接又會指向其 他URL,被單擊后觸發(fā)對應的視圖函數(shù),獲得不同的返回值,從而顯示 不同的頁面,這就是我們?yōu)g覽網(wǎng)頁時的體驗。

提示

route()裝飾器的第一個參數(shù)是URL規(guī)則,用字符串表示,必須以 斜杠(/)開始。這里的URL是相對URL(又稱為內(nèi)部URL),即不包 含域名的URL。以域名www.helloflask.com為例,“/”對應的是根地址 (即www.helloflask.com),如果把URL規(guī)則改為“/hello”,則實際的絕 對地址(外部地址)是www.helloflask.com/hello。 假如這個程序部署在域名為www.helloflask.com的服務器上,當啟 動服務器后,只要你在瀏覽器里訪問www.helloflask.com,就會看到瀏覽器上顯示一行“Hello,F(xiàn)lask!”問候。

1.為視圖綁定多個URL

@app.route('/hi')
@app.route('/hello')
def say_hello():
 return '<h2>Hello, Flask!</h2>'

2.動態(tài)URL

@app.route('/greet/<name>')
def greet(name):
 return '<h2>Hello, %s!</h2>' % name

附注:

當URL規(guī)則中包含變量時,如果用戶訪問的URL中沒有添加變量, 比如/greet,那么Flask在匹配失敗后會返回一個404錯誤響應。一個很常 見的行為是在app.route()裝飾器里使用defaults參數(shù)設置URL變量的默 認值,這個參數(shù)接收字典作為輸入,存儲URL變量和默認值的映射。在 下面的代碼中,我們?yōu)間reet視圖新添加了一個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,視圖函數(shù)返回<h2>Hello,Programmer!</h2>。上面的用 法實際效果等同于:

@app.route('/greet')
@app.route('/greet/<name>')
def greet(name='Programmer'): 
 return '<h2>Hello, %s!</h2>' % name

1.3 啟動開發(fā)服務器

$ 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.

那就是路徑?jīng)]有切到flask 的app.py目錄下!

總結(jié)

以上所述是小編給大家介紹的python flask安裝和命令詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI