rest post无法取到request_小白学Flask第五天 | 详解很重要的request对象
一個(gè)正在努力變強(qiáng)的公眾號(hào)
本文內(nèi)容:
request的form_data_args用法
上傳文件
就是 Flask 中表示當(dāng)前請(qǐng)求的 request 對(duì)象,request對(duì)象中保存了一次HTTP請(qǐng)求的一切信息。
這里給大家準(zhǔn)備了一張表格:
大家看完表格可能也沒什么感覺,到底怎么去使用它們呢?
# -*- coding: utf-8 -*-from flask import Flask,requestapp = Flask(__name__)@app.route("/post", methods=["GET","POST"])def post(): name = request.form.get("name") age = request.form.get("age") return "hello name=%s age=%s" % (name, age)if __name__ == '__main__': app.run(debug=True)可以看到在post視圖函數(shù)當(dāng)中的語句,意思就是獲取到表單數(shù)據(jù)當(dāng)中的name和age的值。
這里可能就會(huì)有些朋友不懂表單數(shù)據(jù)是什么了,其實(shí)學(xué)過html的基本上都會(huì)下面的這個(gè)標(biāo)簽
<form method="post"> <input name="name" type="text"> <input name="age" type="text"> <input type="submit"> form>上面就是一個(gè)表單,也就是需要我們?nèi)ヌ顚懙囊粋€(gè)表格,然后把我們填寫的內(nèi)容放入請(qǐng)求體中返回給服務(wù)器。
為了給大家演示,我這里采用的是postman軟件,這是一款可以模擬多種請(qǐng)求方式的軟件,扔給大家一個(gè)鏈接:
https://www.getpostman.com/downloads/
我就用這款軟件來模擬post請(qǐng)求
以表單的形式發(fā)送:
可以看到我們成功的請(qǐng)求了數(shù)據(jù),同時(shí)也成功的獲取到了表單當(dāng)中的數(shù)據(jù),如果我們不使用這款模擬軟件,我們也可以自行去寫form表單進(jìn)行測試。
這里我們思考一下,如果我們?nèi)ゴ蛴equest中的data數(shù)據(jù)會(huì)是什么返回結(jié)果?data是指請(qǐng)求體當(dāng)中的數(shù)據(jù),我們來測試看看:
@app.route("/post", methods=["GET","POST"])def post(): name = request.form.get("name") age = request.form.get("age") print(request.data) return "hello name=%s age=%s" % (name, age)返回的結(jié)果:
可以看到返回的結(jié)果是空的,這是為什么呢?我們明明post數(shù)據(jù)到request當(dāng)中了。其實(shí)在這之前我們就已經(jīng)將請(qǐng)求體當(dāng)中的數(shù)據(jù)放到了form字典當(dāng)中去了,也就是將 name=kuls&age=11 這類的數(shù)據(jù)轉(zhuǎn)化成類字典的形式了,所以data當(dāng)中的數(shù)據(jù)已經(jīng)不存在了
那么我們再看一種情況
我們?nèi)绻凑認(rèn)SON格式的數(shù)據(jù)發(fā)送過去,會(huì)是怎樣的情況
可以看到這里返回的是空的,為什么?這個(gè)時(shí)候我們再去控制臺(tái)看下data當(dāng)中有么有數(shù)據(jù)返回
可以看到data當(dāng)中是有數(shù)據(jù)的,這也就說明了,當(dāng)我們從前端發(fā)送的數(shù)據(jù)如果是表單的數(shù)據(jù)就可以直接從form里面進(jìn)行提取,如果不是表單數(shù)據(jù)那我們無法form中提取東西,我們只能從data當(dāng)中去提取請(qǐng)求體當(dāng)中的數(shù)據(jù)
大家可能看到過底下這種地址:
http://127.0.0.1:5000/post?city=hunan這種地址稱為查詢字符串,在request當(dāng)中也有相關(guān)的屬性args
@app.route("/post", methods=["GET","POST"])def?post(): city = request.args.get("city") print(request.data) return "hello city=%s" % (city)返回結(jié)果:
args的整體思路和form差不多,所以這里不過多闡述
上傳文件上傳文件主要用了request當(dāng)中最后一個(gè)屬性files
# -*- coding: utf-8 -*-from flask import Flask,requestapp = Flask(__name__)@app.route("/upload", methods=["GET","POST"])def upload(): f = request.files.get("pic") if f is None: # 沒有發(fā)送文件 return "未上傳文件" # 將文件保存在本地 # 1.創(chuàng)建一個(gè)文件 f1 = open("./demo.png", "wb") # 2.向文件寫內(nèi)容 data = f.read() f1.write(data) f1.close() return "上傳成功"if __name__ == '__main__': app.run(debug=True)我們運(yùn)行代碼,并且再次使用postman來進(jìn)行模擬上傳文件。
這里簡單教大家一下如何來上傳
按照?qǐng)D中操作
填寫headers:
Key:Content-Type
Value:multipart/form-data
最后在body當(dāng)中上傳
我們運(yùn)行一下這次的案例
可以看到我們成功上傳!
其實(shí)在這里我們有一個(gè)更加簡單的寫法:
# -*- coding: utf-8 -*-from flask import Flask,requestapp = Flask(__name__)@app.route("/upload", methods=["GET","POST"])def upload(): f = request.files.get("pic") if f is None: # 沒有發(fā)送文件 return "未上傳文件" # 直接使用上傳的文件對(duì)象保存 f.save("./demo1.jpg") return "上傳成功"if __name__ == '__main__': app.run(debug=True)直接通過上傳的文件對(duì)象進(jìn)行保存即可,效果相同!
Flask系列文章:
小白學(xué)Flask第一天 | 我的第一個(gè)Flask程序
小白學(xué)Flask第二天| app對(duì)象的初始化和配置
小白學(xué)Flask第三天| 今天把視圖函數(shù)的路由給講清楚!
小白學(xué)Flask第四天| 把路由轉(zhuǎn)換器玩的更牛逼
持續(xù)更新中...
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的rest post无法取到request_小白学Flask第五天 | 详解很重要的request对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 查询手机号段对应地区编码_想知道海关统计
- 下一篇: python read函数菜鸟_关于py