<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
今天 我們繼續來說一下, 使用flask web application, 如何獲取post 請求引數的。
對於post請求 有幾種方式。 Content-Type
實體頭部用於指示資源的MIME型別 media type 。
content-type是http請求頭的欄位。作為請求頭時(post或者put),使用者端告訴伺服器實際傳送的資料型別。
對於不同的content-type 傳送的資料不太一樣,對於伺服器端,需要如何獲取資料,以及正確解析的方法也是不一樣的。
下面列出常用的幾種 Content-Type
Content-Type 以這種方式的api ,目前來說還是比較多的,現在主流前後端互動的api,使用application/json
這種方式 傳輸資料 非常常見。 主要得意於json 的發展,以及前後端完善的庫支援,使得這種方式 比較常見。
這裡以login 登入介面為例
POST /login HTTP/1.1 Host: 127.0.0.1:5000 Content-Type: application/json Content-Length: 59 { "username":"frank", "password":"jsdofjdsofjsdo" }
curl --location --request POST 'http://127.0.0.1:5000/login' --header 'Content-Type: application/json' --data-raw '{ "username":"frank", "password":"jsdofjdsofjsdo" }'
對於這種請求方式 ,flask 如何獲取請求的body 的內容呢?
# main.py from flask import Flask from flask import request from flask import jsonify # pip install pysimple-log from simplelog import logger app = Flask(__name__) @app.route('/login', methods=[ 'POST']) def login(): if request.method == 'POST': # 這樣獲取就可以了 json_data = request.json logger.info(f"json_data:{json_data}") return jsonify(json_data) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True)
我們直接可以通過, flask 提供的request物件獲取引數。 request.json
通過這個屬性 就可以獲取到 request body 的內容了。是不是很方便呢。
這種方式是 瀏覽器原生form表單預設的提交方式
http 請求報文格式
POST /login HTTP/1.1 Host: 127.0.0.1:5000 Content-Type: application/x-www-form-urlencoded Content-Length: 38 username=frank&password=jsdofjdsofjsdo
curl --location --request POST 'http://127.0.0.1:5000/login' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'username=frank' --data-urlencode 'password=jsdofjdsofjsdo'
對於這中content-type 我們可以使用 request.form
返回一個不可變的字典型別。 然後就可以獲取 request body 啦。
# 省略 ... @app.route('/login', methods=[ 'POST']) def login(): if request.method == 'POST': json_data = request.form logger.info(f"json_data:{json_data}") return jsonify(json_data)
這又是一個常見的 POST 資料提交的方式。我們使用表單上傳檔案時,必須讓 form 表單的enctype 等於 multipart/form-data。直接來看一個請求範例:
這裡我只是演示 一下,對應 http報文
POST /login HTTP/1.1 Host: 127.0.0.1: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 --location --request POST 'http://127.0.0.1:5000/login' --form 'username="frank"' --form 'password="111111sfsfsafsafas=="'
對於這種方式還是可以通過 request.from
來獲取引數
# ... 省略 @app.route('/login', methods=[ 'POST']) def login(): if request.method == 'POST': json_data = request.form logger.info(f"json_data:{json_data}") return jsonify(json_data)
用純文字傳送資料
POST /login HTTP/1.1 Host: 127.0.0.1:5000 Content-Type: text/plain Content-Length: 59 { "username":"frank", "password":"jsdofjdsofjsdo" }
curl --location --request POST 'http://127.0.0.1:5000/login' --header 'Content-Type: text/plain' --data-raw '{ "username":"frank", "password":"jsdofjdsofjsdo" }'
flask 如何正常接收資料呢? 原生的請求資料會放在 request.data
裡面,型別是bytes,需要轉成字串,然後通過json 模組轉成字典。
import json from flask import Flask from flask import request from flask import jsonify # pip install pysimple-log from simplelog import logger app = Flask(__name__) @app.route('/login', methods=['POST']) def login(): if request.method == 'POST': # bytes 型別 raw_data = request.data logger.info(f'raw_data:{raw_data}') json_data = json.loads(raw_data.decode()) logger.info(f"json_data:{json_data},type:{type(json_data)}") return jsonify(json_data)
結果如下:
可以看出可以正常解析資料了,並且以json 的形式返回了。
本文主要說明了使用flask 框架,如果獲取常見的post請求body 資料,今天的分享就到這裡了。
到此這篇關於使用flask如何獲取post請求引數的文章就介紹到這了,更多相關flask獲取post請求引數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45