flask 獲取各種請求數據:GET form-data x-www-form-urlencoded JSON headers 上傳文件

在 Flask 里,能使用多種方法獲取不同類型的請求數據,下面詳細介紹常見請求數據的獲取方式。

獲取查詢字符串參數(GET 請求)

查詢字符串參數一般在 URL 里,以 ?key1=value1&key2=value2 這種形式存在。可通過 request.args 來獲取。

from flask import Flask, requestapp = Flask(__name__)@app.route('/get_params')
def get_params():# 獲取單個參數name = request.args.get('name')age = request.args.get('age', type=int)  # 指定參數類型# 獲取所有參數all_params = request.args.to_dict()return f"Name: {name}, Age: {age}, All params: {all_params}"if __name__ == '__main__':app.run(debug=True)

1

獲取表單數據(POST 請求)

表單數據通常由 HTML 表單提交,能通過 request.form 來獲取 form-datax-www-form-urlencoded 數據。

from flask import Flask, requestapp = Flask(__name__)@app.route('/submit_form', methods=['POST'])
def submit_form():# 獲取單個表單字段username = request.form.get('username')password = request.form.get('password')# 獲取所有表單字段all_form_data = request.form.to_dict()return f"Username: {username}, Password: {password}, All form data: {all_form_data}"if __name__ == '__main__':app.run(debug=True)

1
1

獲取 JSON 數據(POST、PUT 等請求)

如果請求數據是 JSON 格式,可使用 request.get_json() 方法獲取。

from flask import Flask, requestapp = Flask(__name__)@app.route('/submit_json', methods=['POST'])
def submit_json():# 獲取 JSON 數據data = request.get_json()if data:name = data.get('name')age = data.get('age')return f"Name: {name}, Age: {age}"else:return "No valid JSON data provided", 400if __name__ == '__main__':app.run(debug=True)

2

獲取請求頭信息

請求頭信息可通過 request.headers 來獲取。

from flask import Flask, requestapp = Flask(__name__)@app.route('/get_headers')
def get_headers():# 獲取單個請求頭user_agent = request.headers.get('User-Agent')# 獲取所有請求頭all_headers = dict(request.headers)return f"User-Agent: {user_agent}, All headers: {all_headers}"if __name__ == '__main__':app.run(debug=True)

1

獲取上傳文件

文件上傳請求的數據能通過 request.files 來獲取。

from flask import Flask, requestapp = Flask(__name__)@app.route('/upload_file', methods=['POST'])
def upload_file():# 獲取上傳的文件file = request.files.get('file')if file:# 保存文件file.save('uploaded_file.txt')return "File uploaded successfully"else:return "No file provided", 400if __name__ == '__main__':app.run(debug=True)

1

同時獲取 URL 查詢字符串參數和表單數據

在 Flask 里, request.values 是一個特殊的 MultiDict 對象,它將 request.args (用于獲取 URL 查詢字符串參數)和 request.form (用于獲取表單數據)結合起來,提供了一種統一的方式來訪問 GET 和 POST 請求中的數據。

from flask import Flask, requestapp = Flask(__name__)@app.route('/mixed_data', methods=['GET', 'POST'])
def mixed_data():param1 = request.values.get('param1')param2 = request.values.get('param2')return f"Param1: {param1}, Param2: {param2}"if __name__ == '__main__':app.run(debug=True)

1

  • request.values 會優先獲取表單數據,如果表單數據和查詢字符串參數有同名的鍵,會返回表單數據的值。
  • 對于 JSON 數據和文件上傳數據, request.values 無法獲取,需要使用 request.get_json()request.files 來處理。

參考鏈接

https://dormousehole.readthedocs.io/en/latest/api.html#flask.Request.args

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81566.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81566.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81566.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

人工智能助力工業制造:邁向智能制造的未來

在當今數字化轉型的浪潮中,人工智能(AI)技術正逐漸成為推動工業制造領域變革的核心力量。智能制造作為工業 4.0 的重要組成部分,通過將 AI 技術與傳統制造工藝深度融合,正在重塑整個生產流程,提高生產效率、…

【java八股文】深入淺出synchronized優化原理

🔍 開發者資源導航 🔍🏷? 博客主頁: 個人主頁📚 專欄訂閱: JavaEE全棧專欄 synchronized優化原理 synchronized即使悲觀鎖也是樂觀鎖,擁有自適應性。 jvm內部會統計每個鎖的競爭激烈程度&…

生成式 AI 的重要性

在科技飛速發展的今天,我們正站在一個前所未有的變革節點上。生成式 AI,宛如一顆突然劃破夜空的耀眼流星,以其強大的創造力和無限的可能性,迅速成為全球矚目的焦點。它究竟有何等魔力,能在如此短的時間內引發如此巨大的轟動?這背后又隱藏著怎樣的時代密碼,等待著我們去解…

生成式 AI 的闡釋

在科技浪潮的洶涌推動下,一個全新的時代正以前所未有的速度向我們奔來,生成式 AI 無疑是這股浪潮中最耀眼的浪尖。它究竟是什么?又將如何重塑我們的世界?這不僅是科技愛好者們熱衷探討的話題,更是關乎每一個人未來發展的重要命題。 生成式 AI,從本質上來說,是一種能夠自…

C++ 中 virtual 的作用

文章目錄 1. 用于虛繼承2. 用于抽象基類3. 用于多態 C 的 virtual 關鍵字,常見有 3 種用途:虛繼承、抽象基類和多態。 1. 用于虛繼承 virtual 用于虛繼承時,主要是為了解決菱形繼承中的重復繼承同名成員問題。使用形式如下 class Derived:…

軟件測試52講學習分享:深入理解單元測試

課程背景 最近我在學習極客時間的《軟件測試52講》課程,這是由騰訊TEG基礎架構部T4級專家茹炳晟老師主講的認證課程。作為數字化轉型與人工智能(DTAI)產業人才基地建設中心的認證課程,內容非常專業實用。今天想和大家分享第3講"什么是單元測試&…

Java SE(7)——類和對象(二)

1.包(package) 1.1 包的定義 在Java中,包是一種用于組織和管理類,接口和其他包的機制。主要作用是防止命名沖突,并提供一種訪問控制機制 1.2 package關鍵字 package關鍵字的主要作用是聲明當前類在哪個包里面。 當然,用戶也可以…

Manus聯合創始人:公司產品基于Claude和阿里千問大模型開發

3月11日消息,日前,Manus官方在社交平臺轉發了公司聯合創始人、首席科學家季逸超對Manus的技術解讀,季逸超在評論區回復網友關于“Manus使用了哪一個基礎大模型”這一問題時回復稱,“我們用過Claude,也用過不同版本的Qw…

欺騙單頁應用(SPA)渲染隱藏路由 -- trouble at the spa b01lersCTF

題目信息:I had this million-dollar app idea the other day, but I can’t get my routing to work! I’m only using state-of-the-art tools and frameworks, so that can’t be the problem… right? Can you navigate me to the endpoint of my dreams? 題目…

大數據引領行業革命:深度解析與未來趨勢

??個人主頁??:慌ZHANG-CSDN博客 ????期待您的關注 ???? 在信息化、數字化、智能化日益發展的今天,大數據技術已經成為推動產業變革的重要引擎。它不僅僅是一個技術工具,更是各行各業創新和優化的核心動力。無論是大企業還是初創公司,大數據的應用已經成為提升效…

[machine learning] Transformer - Attention (二)

本文介紹帶訓練參數的self-attention,即在transformer中使用的self-attention。 首先引入三個可訓練的參數矩陣Wq, Wk, Wv,這三個矩陣用來將詞向量投射(project)到query, key, value三個向量上。下面我們再定義幾個變量: import torch inpu…

施磊老師rpc(三)

文章目錄 mprpc框架項目動態庫編譯框架生成動態庫框架初始化函數-文件讀取1. 為什么要傳入 argc, argv2. 讀取參數邏輯3. 配置文件設計 init部分實現 mprpc配置文件加載(一)配置文件加載類成員變量主要方法**src/include/mprpcconfig.h** 配置文件**bin/test.conf** 實現配置文…

文獻分享:通過簡單的生物偶聯策略將肽雙特異性抗體(pBsAbs)應用于免疫治療

背景 雙特異性抗體是將單克隆抗體的兩個不同抗原結合位點融合成一個單一實體的人工分子。它們已經成為一種很有前景的下一代抗癌治療方法。盡管雙特異性抗體的應用令人著迷,但雙特異性抗體的設計和生產仍然繁瑣而富有挑戰性,導致研發過程漫長&#xff0…

二、shell腳本--變量與數據類型

1. 變量的定義與使用 定義變量:簡單直接 在 Shell 里定義變量相當容易: 基本格式: variable_namevalue關鍵點 ?:賦值號 的兩邊絕對不能有空格!這絕對是初學者最容易踩的坑之一 😨,務必留意&#xff01…

java_Lambda表達式

1、背景 lambda表達式是Java SE 8中一個重要的新特性。lambda表達式允許你通過表達式來代替功能接口。lambda表達式就和方法一樣樣,它提供了一個正常的參數列表和一個使用這些參數的主體(body,可以是一個表達式和一個代碼塊)。La…

給QCustomPlot添加一個QScrollBar滾動條、限制縮放范圍、自動設置大小和右邊欄垂直縮放

實現效果 實現思路 從QCustomPlot類派生一個類,進行個性化設置,在軸矩形的上邊設置Margin,放一個滾動條,設置滾動條的樣式 常量定義 #define NQSCRB 1000構造函數初始化 // 設置QScrollBar的樣式// 頂部空--5,左側空--6

實驗-組合電路設計1-全加器和加法器(數字邏輯)

目錄 一、實驗內容 二、實驗步驟 2.1 全加器的設計 2.2 加法器的設計 三、調試過程 3.1 全加器調試過程 2.加法器的調試過程 四、實驗使用環境 五、實驗小結和思考 一、實驗內容 a) 介紹 在這次實驗中,你將熟悉 Logisim 的操作流程,并且學習…

Linux進程控制與替換詳解

進程創建 fork函數初識 在linux中fork函數是非常重要的函數,它從已存在進程中創建?個新進程。新進程為子進程,而原進程為父進程。 進程調用fork,當控制轉移到內核中的fork代碼后,內核做: ? 分配新的內存塊和內核數據結構給子進程 ? 將父進程部分數據結構內容拷貝至…

Vue3學習筆記2——路由守衛

路由守衛 全局 router.beforeEach((to, from, next) > {})router.afterEach((to, from, next) > {}) 組件內守衛 beforeRouteEnter((to, from, next) > {})beforeRouteUpdate((to, from, next) > {})beforeRouteLeave((to, from, next) > {}) 路由獨享 be…

AI與無人零售:如何通過智能化技術提升消費者體驗和運營效率?

引言:無人零售不只是無人值守 你走進一家無人便利店,沒有迎賓、沒有收銀員,甚至沒有一個人在場,但你剛拿起商品,貨架旁的攝像頭就悄悄“看懂”了你的動作,系統已經在后臺為你記賬。你以為只是沒人管&#x…