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.mzph.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…