使用flask如何獲取post請(qǐng)求參數(shù)_第1頁(yè)
使用flask如何獲取post請(qǐng)求參數(shù)_第2頁(yè)
使用flask如何獲取post請(qǐng)求參數(shù)_第3頁(yè)
使用flask如何獲取post請(qǐng)求參數(shù)_第4頁(yè)
使用flask如何獲取post請(qǐng)求參數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第使用flask如何獲取post請(qǐng)求參數(shù)目錄前言概述1.application/jsonhttp請(qǐng)求報(bào)文格式如下:使用curlpostman請(qǐng)求flask如何獲取請(qǐng)求體呢2.application/x-www-form-urlencoded使用curl請(qǐng)求flask如何獲取請(qǐng)求體呢3.multipart/form-datahttp請(qǐng)求報(bào)文使用curl請(qǐng)求postman請(qǐng)求flask如何獲取請(qǐng)求體呢4.text/plainhttp請(qǐng)求報(bào)文如下使用curl請(qǐng)求postman請(qǐng)求flask如何獲取請(qǐng)求體呢總結(jié)參考文檔

前言

今天我們繼續(xù)來(lái)說(shuō)一下,使用flaskwebapplication,如何獲取post請(qǐng)求參數(shù)的。

概述

對(duì)于post請(qǐng)求有幾種方式。Content-Type實(shí)體頭部用于指示資源的MIME類型mediatype。

content-type是http請(qǐng)求頭的字段。作為請(qǐng)求頭時(shí)(post或者put),客戶端告訴服務(wù)器實(shí)際發(fā)送的數(shù)據(jù)類型。

對(duì)于不同的content-type發(fā)送的數(shù)據(jù)不太一樣,對(duì)于服務(wù)器端,需要如何獲取數(shù)據(jù),以及正確解析的方法也是不一樣的。

下面列出常用的幾種Content-Type

application/jsonapplication/x-www-form-urlencodedmultipart/form-datatext/plaintext/xmltext/html

1.application/json

Content-Type以這種方式的api,目前來(lái)說(shuō)還是比較多的,現(xiàn)在主流前后端交互的api,使用application/json這種方式傳輸數(shù)據(jù)非常常見(jiàn)。主要得意于json的發(fā)展,以及前后端完善的庫(kù)支持,使得這種方式比較常見(jiàn)。

這里以login登錄接口為例

http請(qǐng)求報(bào)文格式如下:

POST/loginHTTP/1.1

Host::5000

Content-Type:application/json

Content-Length:59

"username":"frank",

"password":"jsdofjdsofjsdo"

}

使用curl

curl--location--requestPOST':5000/login'\

--header'Content-Type:application/json'\

--data-raw'{

"username":"frank",

"password":"jsdofjdsofjsdo"

postman請(qǐng)求

flask如何獲取請(qǐng)求體呢

對(duì)于這種請(qǐng)求方式,flask如何獲取請(qǐng)求的body的內(nèi)容呢?

#main.py

fromflaskimportFlask

fromflaskimportrequest

fromflaskimportjsonify

#pipinstallpysimple-log

fromsimplelogimportlogger

app=Flask(__name__)

@app.route('/login',methods=['POST'])

deflogin():

ifrequest.method=='POST':

#這樣獲取就可以了

json_data=request.json

(f"json_data:{json_data}")

returnjsonify(json_data)

if__name__=='__main__':

app.run(host='',port=5000,debug=True)

我們直接可以通過(guò),flask提供的request對(duì)象獲取參數(shù)。request.json通過(guò)這個(gè)屬性就可以獲取到requestbody的內(nèi)容了。是不是很方便呢。

2.application/x-www-form-urlencoded

這種方式是瀏覽器原生form表單默認(rèn)的提交方式

http請(qǐng)求報(bào)文格式

POST/loginHTTP/1.1

Host::5000

Content-Type:application/x-www-form-urlencoded

Content-Length:38

username=frankpassword=jsdofjdsofjsdo

使用curl請(qǐng)求

curl--location--requestPOST':5000/login'\

--header'Content-Type:application/x-www-form-urlencoded'\

--data-urlencode'username=frank'\

--data-urlencode'password=jsdofjdsofjsdo'

flask如何獲取請(qǐng)求體呢

對(duì)于這中content-type我們可以使用request.form返回一個(gè)不可變的字典類型。然后就可以獲取requestbody啦。

#省略...

@app.route('/login',methods=['POST'])

deflogin():

ifrequest.method=='POST':

json_data=request.form

(f"json_data:{json_data}")

returnjsonify(json_data)

3.multipart/form-data

這又是一個(gè)常見(jiàn)的POST數(shù)據(jù)提交的方式。我們使用表單上傳文件時(shí),必須讓form表單的enctype等于multipart/form-data。直接來(lái)看一個(gè)請(qǐng)求示例:

這里我只是演示一下,對(duì)應(yīng)http報(bào)文

http請(qǐng)求報(bào)文

POST/loginHTTP/1.1

Host::5000

Content-Type:multipart/form-data;boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

Content-Length:239

----WebKitFormBoundary7MA4YWxkTrZu0gW

Content-Disposition:form-data;name="username"

frank

----WebKitFormBoundary7MA4YWxkTrZu0gW

Content-Disposition:form-data;name="password"

111111sfsfsafsafas==

----WebKitFormBoundary7MA4YWxkTrZu0gW

使用curl請(qǐng)求

curl--location--requestPOST':5000/login'\

--form'username="frank"'\

--form'password="111111sfsfsafsafas=="'

postman請(qǐng)求

flask如何獲取請(qǐng)求體呢

對(duì)于這種方式還是可以通過(guò)request.from來(lái)獲取參數(shù)

#...省略

@app.route('/login',methods=['POST'])

deflogin():

ifrequest.method=='POST':

json_data=request.form

(f"json_data:{json_data}")

returnjsonify(json_data)

4.text/plain

用純文本發(fā)送數(shù)據(jù)

http請(qǐng)求報(bào)文如下

POST/loginHTTP/1.1

Host::5000

Content-Type:text/plain

Content-Length:59

"username":"frank",

"password":"jsdofjdsofjsdo"

使用curl請(qǐng)求

curl--location--requestPOST':5000/login'\

--header'Content-Type:text/plain'\

--data-raw'{

"username":"frank",

"password":"jsdofjdsofjsdo"

postman請(qǐng)求

flask如何獲取請(qǐng)求體呢

flask如何正常接收數(shù)據(jù)呢?原生的請(qǐng)求數(shù)據(jù)會(huì)放在request.data里面,類型是bytes,需要轉(zhuǎn)成字符串,然后通過(guò)json模塊轉(zhuǎn)成字典。

importjson

fromflaskimportFlask

fromflaskimportrequest

fromflaskimportjsonify

#pipinstallpysimple-log

fromsimplelogimportlogger

app=Flask(__name__)

@app.route('/login',methods=['POST'])

deflogin():

ifrequest.method=='POST':

#bytes類型

raw_data=request.data

(f'raw_data:{raw_data}')

json_data=json.loads(raw_data.decode())

(f"json_data:{json_data},type:{type(json_data)}")

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論