Python Web 之Flask基礎(一)

2021-09-09 01:31:03 字數 4588 閱讀 9202

flask 的基本使用

flask 1.0 文件

依賴

當安裝 flask 時,以下配套軟體會被自動安裝。

可選依賴

以下配套軟體不會被自動安裝。如果安裝了,那麼 flask 會檢測到這些軟體。

建立乙個專案資料夾,然後建立乙個虛擬環境。

mkdir myproject

cd myproject

python -m venv venv

在開始工作前,先要啟用相應的虛擬環境。

# linux 下

. venv/bin/activate

# windows下

venv\scripts\activate

python -m pip install flask
在windows平台命令列輸入以上命令安裝,可能會存在markupsafe依賴安裝失敗的問題,這主要是因為windows命令列編碼與python中的不一致導致的問題。windows命令列的預設編碼是gbk,而python3中預設編碼是utf-8,因此可以臨時將windows命令列切換為utf-8編碼

# 切換編碼為utf-8

chcp 65001

#手動安裝 markupsafe

python -m pip install markupsafe

# 安裝完成後,請再次切回gbk。否則將導致以後使用cmd時出現各種奇怪的問題

# windows系統的預設編碼即gbk,請與系統保持一致。

chcp 936

如安裝時緩慢或卡住,很可能是網路問題導致的,則建議使用國內源安裝

# 使用清華大學的源

python -m pip install flask -i

建立hello.py檔案,輸入如下內容
from flask import flask

'/')

defhello_world()

:return

'hello, world!'

flask run

# windows下

python -m flask run

在瀏覽器輸入以下位址,正常顯示hello, world!

http://localhost:5000/

應用例項需要知道對每個url的請求要執行哪些對應的函式,所以儲存了乙個url到python函式之間的對映關係。用於處理url和函式之間關係的程式稱為路由

'/'

)def

index()

:return

'hello world!'

def

index()

:return

'hello world!'

'/',

'index'

, index)

像上面**中的hello_world()index()這樣處理客戶端請求的函式被稱為檢視函式。在瀏覽器中訪問相應的url後,會觸發伺服器執行對應的檢視函式。這個函式的返回值稱為響應,也就是客戶端瀏覽器接收到的內容。檢視函式返回的響應可以是包含 html 的字串,也可以是複雜表單。

當請求的url中帶有動態引數時,我們可以將檢視函式與動態路由結合使用

'/greet/'

)def

sayhello

(name)

:return

'hello, '

+ name

增加以上**後重新執行伺服器,在瀏覽器輸入:

http://localhost:5000/greet/bob
則瀏覽器顯示hello, bob

請求

flask 從客戶端收到請求時,將客戶端傳送的http請求封裝成了請求物件。想讓檢視函式能夠訪問請求物件,一種直截了當的方式是將其作為引數傳入檢視函式,不過這會導致應用中的每個檢視函式都多出乙個引數。為了避免大量可有可無的引數把檢視函式弄得一團糟,flask 使用上下文臨時把某些物件變為全域性可訪問。

事實上它並不是真正的全域性變數,在多執行緒伺服器中,多個執行緒同時處理不同客戶端傳送的不同請求時,每個執行緒看到的請求物件必然不同。flask 使用上下文讓特定的變數在乙個執行緒中全域性可訪問,與此同時卻不會干擾其他執行緒。

示例**

# 引入請求物件

from flask import request

'/')

defindex()

: user_agent = request.headers.get(

'user-agent'

)return

'your browser is'

+ user_agent

請求物件包含客戶端傳送的 http請求的全部資訊

屬性或方法

簡述form

乙個字典,儲存請求提交的所有表單字段

args

乙個字典,儲存通過 url查詢字串傳遞的所有引數

values

乙個字典,form 和args 的合集

cookies

乙個字典,儲存請求的所有 cookie

headers

乙個字典,儲存請求的所有 http首部

files

乙個字典,儲存請求上傳的所有檔案

get_data()

返回請求主體緩衝的資料

get_json()

返回乙個python字典,包含解析請求主體後得到的 json

blueprint

處理請求的flask 藍本的名稱

endpoint

處理請求的flask端點的名稱;flask把檢視函式的名稱用作路由端點的名稱

method

http請求方法,例如 get 或post

scheme

url方案(http 或https)

is_secure()

通過安全的連線(https)傳送請求時返回 true

host

請求定義的主機名,如果客戶端定義了埠號,還包括埠號

path

url的路徑部分

query_string

url的查詢字串部分,返回原始二進位制值

full_path

url的路徑和查詢字串部分

url客戶端請求的完整url

base_url

同url,但沒有查詢字串部分

remote_addr

客戶端的ip位址

environ

請求的原始wsgi環境字典

響應

flask 呼叫檢視函式後,會將其返回值作為響應的內容。大多情況下,響應就是乙個簡單的字串,作為html頁面返回給客戶端。但 http 協議需要的不僅是作為請求響應的字串。http 響應中乙個很重要的部分是狀態碼,flask預設設為 200,表明請求已被成功處理。

flask有兩種方式返回響應,一種是簡單的利用多返回值,如下例,第二個引數為狀態碼

'/')

defindex()

:return'',

400檢視函式還可以返回三個引數,第三個引數是乙個由 http 響應頭組成的字典。

如果不想使用檢視函式的多返回值的方式返回響應,還可以使用另一種方式返回響應,那就是建立乙個響應物件,然後讓檢視函式返回這個響應物件。

from flask import make_response

'/')

defindex()

: response = make_response('')

response.set_cookie(

'thiscookie'

,'666'

)return response

響應物件常用屬性和方法

屬性或方法

簡述status_code

http數字狀態碼

headers

乙個類似字典的物件,包含隨響應傳送的所有首部

set_cookie()

為響應新增乙個cookie

delete_cookie()

刪除乙個cookie

content_length

響應主體的長度

content_type

響應主體的**型別

set_data()

使用字串或位元組值設定響應

get_data()

獲取響應主體

python Web應用框架之Flask

pip install flask 以下是乙個簡單的flask應用 from flask import flask def hello world return hello world if name main 執行 python hello.py running on首先,我們匯入了 flask ...

python Web開發之Flask框架學習

2.3.1 程式和請求上下文 flask從客戶端收到請求時,要讓檢視函式能訪問一些物件,這樣才可以處理請求。請求物件是乙個很好的例子,他封裝了客戶端傳送的http請求。2.6 flask擴充套件 flask被設計成可擴充套件模式,因此沒有提供一些重要的功能,例如資料庫和使用者認證,所以開發者可以自由...

Python Web開發之Flask框架(一)

flask是乙個python語言編寫的web框架 微框架 核心功能 請求響應處理 werkzeug 和模板渲染 jinja模板渲染庫 coding utf 8 from flask import flask def index return if name main 0.0.0.0 debug tr...