1、Flask中的request
在Python發(fā)送Post、Get等請(qǐng)求時(shí),我們使用到requests庫。Flask中有一個(gè)request庫,有其特有的一些方法和屬性,注意跟requests不是同一個(gè)。
2、Post請(qǐng)求:request.get_data()
用于服務(wù)端獲取客戶端請(qǐng)求數(shù)據(jù)。注意:是未經(jīng)任何處理的原始數(shù)據(jù)而不管內(nèi)容類型,如果數(shù)據(jù)時(shí)json的,則取得是json字符串,排序和請(qǐng)求參數(shù)一致。
2.1 Flask代碼
不同方法的示例僅需要更換視圖函數(shù),后續(xù)僅展示視圖函數(shù)。
# 注意:flask中的request和requests庫不是同一個(gè),要區(qū)分開
from flask import Flask, request
# 創(chuàng)建一個(gè)flask實(shí)例
app = Flask(__name__)
# 視圖函數(shù),只允許get和post請(qǐng)求
@app.route('/', methods=['GET', 'POST'])
def request_flask():
# 獲取未經(jīng)處理過的原始數(shù)據(jù)而不管內(nèi)容類型,如果數(shù)據(jù)格式是json的
# 則取得是json字符串,排序和請(qǐng)求參數(shù)一致
data = request.get_data()
print(data)
print(type(data))
return 'hello world'
if __name__ == '__main__':
app.run()
2.2 測(cè)試代碼(一直應(yīng)用于后續(xù)章節(jié),不再贅述)
import requests
data = {
"username": "cc",
"password": "123456"
}
url = "http://127.0.0.1:5000/"
resp = requests.post(url=url, json=data)
print('post:', resp)
print('post:', resp.text)
resp = requests.get(url=url, params=data)
print('get:', resp)
print('get:', resp.text)
2.3 執(zhí)行效果
2.3.1 Flask
get.data()獲取到的請(qǐng)求數(shù)據(jù)是字節(jié)流,排序和請(qǐng)求參數(shù)一致。
2.3.2 請(qǐng)求結(jié)果
get和post請(qǐng)求都成功了。
3、Post請(qǐng)求:request.data
獲取到的也是未經(jīng)處理的原始數(shù)據(jù),如果數(shù)據(jù)格式是json的,則取得是json字符串,排序和請(qǐng)求參數(shù)一致。request.get_data()效果一樣
4、Post請(qǐng)求:request.get_json()
將請(qǐng)求參數(shù)做了處理,得到字典格式,因此排序會(huì)打亂,依據(jù)字典排序規(guī)則。
4.1 Flask代碼
# 視圖函數(shù),只允許get和post請(qǐng)求
@app.route('/', methods=['GET', 'POST'])
def request_flask():
# 將請(qǐng)求參數(shù)做了處理,得到字典格式,因此排序會(huì)打亂,依據(jù)字典排序規(guī)則。
data = request.get_json()
print(data)
print(type(data))
# 服務(wù)端就可以根據(jù)字典進(jìn)行取值
username = request.get_json()["username"]
print(username)
return 'hello world'
4.2 執(zhí)行效果
4.2.1 Flask
將請(qǐng)求參數(shù)做了處理,得到字典格式,方便服務(wù)端按鍵取值,提取到username是“cc”。
注意:get請(qǐng)求是沒有字典的,不能夠取值,運(yùn)行時(shí)可以注釋掉get方法。
4.2.2 請(qǐng)求結(jié)果
post請(qǐng)求成功。
5、Post請(qǐng)求:request.json
跟request.get_json()效果相同。得到的是字典格式的,因此排序會(huì)打亂,依據(jù)字典排序規(guī)則。
代碼如下:
# 視圖函數(shù),只允許get和post請(qǐng)求
@app.route('/', methods=['GET', 'POST'])
def request_flask():
# 將請(qǐng)求參數(shù)做了處理,得到的是字典格式的,因此排序會(huì)打亂,依據(jù)字典排序規(guī)則
data = request.json
print(data)
print(type(data))
# 如果這里的key服務(wù)端寫錯(cuò)了,客戶端請(qǐng)求時(shí),就會(huì)出現(xiàn)500
username = request.json['username']
print(username)
return 'hello world'
6、Get請(qǐng)求:request.args.get()
6.1 Flask代碼
# 視圖函數(shù),只允許get和post請(qǐng)求
@app.route('/', methods=['GET', 'POST'])
def request_flask():
# 可以獲取單個(gè)的值
username = request.args.get("username")
print(username)
return 'hello world'
6.2 執(zhí)行結(jié)果
服務(wù)端拿到了username的值“cc”
7、Get請(qǐng)求:request.args.to_dict()
7.1 Flask代碼
# 視圖函數(shù),只允許get和post請(qǐng)求
@app.route('/', methods=['GET', 'POST'])
def request_flask():
# 可以獲取get請(qǐng)求的所有參數(shù),返回值是ImmutableMutiDict(不可變的多字典)類型
i = request.args
print(i)
# 將獲得的參數(shù)轉(zhuǎn)化成字典
j = i.to_dict()
print(j)
print(type(j))
print(j["username"])
return 'hello world'
7.2 執(zhí)行結(jié)果
8、模擬請(qǐng)求報(bào)錯(cuò)
8.1 500 Internal Server Error
當(dāng)服務(wù)端key寫錯(cuò)時(shí),就會(huì)報(bào)500錯(cuò)誤,例如可以把key username改成usename,運(yùn)行后看下效果。
8.2 404 Not Found
僅創(chuàng)建了實(shí)例,并沒有視圖函數(shù),啟動(dòng)socket服務(wù)后,訪問地址就會(huì)報(bào)404?;蛘哒?qǐng)求url填寫錯(cuò)誤。文章來源:http://www.zghlxwxcb.cn/news/detail-645712.html
from flask import Flask
# 創(chuàng)建一個(gè)flask實(shí)例
app = Flask(__name__)
if __name__ == '__main__':
app.run()
文章來源地址http://www.zghlxwxcb.cn/news/detail-645712.html
到了這里,關(guān)于使用Flask.Request的方法和屬性,獲取get和post請(qǐng)求參數(shù)(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!