【Python】flask框架请求体数据,文件上传,请求头信息获取方式案例汇总

news2024/11/15 13:32:19

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,面试宝典等分享。

所属的专栏:flask框架零基础,进阶应用实战教学
景天的主页:景天科技苑

文章目录

  • 获取请求体数据
    • 1.获取表单数据(不包含上传文件)
    • 2.获取表单数据(包含文件上传)
    • 3.获取客户端ajax请求数据
    • 4.上传的文件保存到本地
  • 获取请求头数据
    • 1.获取请求头所有信息
    • 2.获取单个请求头信息
    • 3.把原始属性名转换成小写下划线格式来获取

获取请求体数据

与Django不同的是,flask是不需要将request对象作为第一个参数传入视图函数,他的request对象是来自于flask,是一个请求上下文对象(全局变量 --> 线程局部变量,使用起来就像线程全局变量一样,具有较高的隔离性),我们只需导入即可使用,request对象中保存了一次HTTP请求的一切信息。

1.获取表单数据(不包含上传文件)

视图函数

@app.route("/form", methods=["get","post"])
def form():
    """
    获取客户端请求的请求体[表单]
    # :return:
    """
    """
    获取表单数据
    请求url:
    """
    """获取表单数据[不包含上传文件]"""
    print(request.form)
    # # ImmutableMultiDict([('username', 'root'), ('password', '123456'), ('fav', 'swimming'), ('fav', 'watch TV')])
    # # 获取表单项数据[单个值]
    print(request.form.get("username")) # root
    print(request.form.get('pwd'))
    # # 获取表单项数据[多个值]
    print(request.form.getlist("fav"))  # ['swimming', 'watch TV']
    return "hello, jingtian flask"

postman请求
非文件上传类post请求,使用x-www-form-urlencoded类型表单数据
在这里插入图片描述

看下终端打印
在这里插入图片描述

2.获取表单数据(包含文件上传)

视图函数

@app.route("/form", methods=["get","post"])
def form():
    """
    获取客户端请求的请求体[表单]
    # :return:
    """
    """
    获取表单数据
    请求url:
    """
   
    """获取表单数据的上传文件"""
    print(request.form.get("username"))
    # # 获取所有上传文件
    # print(request.files)  # ImmutableMultiDict([('avatar', <FileStorage: 's.png' ('image/png')>)])
    # # 根据name值获取单个上传文件
    print(request.files.get("avatar"))  # <FileStorage: 's.png' ('image/png')>
    # # 根据name值获取多个上传文件
    print(request.files.getlist("avatar"))  # [<FileStorage: 'a.png' ('image/png')>, <FileStorage: 's.png' ('image/png')>]

    return "hello, jingtian flask"

postman请求
非文件上传类post请求,使用form-data类型表单数据
postman上传文件,数据类型选File
在这里插入图片描述

选择上传文件
在这里插入图片描述

发送请求
在这里插入图片描述

看下终端打印
在这里插入图片描述

上传多个文件,postman同时选中多个文件
在这里插入图片描述

终端打印,使用getlist可以获取到多个文件对象
在这里插入图片描述

3.获取客户端ajax请求数据

ajax请求数据,在请求头处的Content-type是 application/json
body里面上柴男raw json数据
在这里插入图片描述

Headers里面的Content-type
在这里插入图片描述

视图函数

@app.route("/data", methods=["post"])
def data():
    """
    获取客户端请求的请求体[ajax]
    :return:
    """
    """判断本次客户端是否是ajax请求获取本次客户端提交的数据格式是否是json"""
    print(request.is_json)

    """获取客户端请求体中的json数据,要确保发送的是json数据才能获取到"""
    print(request.json)  # {'username': 'jingtian', 'password': '123456'}

    """获取客户端请求体的原始数据,得到的是byte类型数据"""
    print(request.data)  # b'{\r\n  "username": "root",\r\n  "password": "123456"\r\n}'
    # 原始数据转json格式,通过json.loads()
    print(json.loads(request.data))  # {'username': 'root', 'password': '123456'}

    """接收其他格式类型的数据"""
    print(request.data)

    return "hello, flask"

发送json类型数据post请求
在这里插入图片描述

终端打印
在这里插入图片描述

获取其他类型数据,直接使用request.data
上传xml格式数据,就不能在用request.json()获取了,否则报错

"""接收其他格式类型的数据,使用request.data"""
print(request.data)

在这里插入图片描述

终端打印
在这里插入图片描述

4.上传的文件保存到本地

视图函数

#上传文件的保存
@app.route("/file", methods=["post", "put", "patch"])
def file():
    """
    接收上传文件并保存文件
    :return:
    """
    #得到的是FileStorage对象
    avatar = request.files.get("avatar")
    print(avatar)
    # 调用FileStorage提供的save方法就可以保存文件了,dst指定保存文件路径
    avatar.save(dst="./jingtian.png")

    return "hello, flask"

使用postman文件上传
在这里插入图片描述

发送请求
在这里插入图片描述

本地查看,已保存到本地
在这里插入图片描述

多文件保存类似,无外乎加个循环而已,感兴趣的小伙伴可以试试,有疑问可以私信我哦

获取请求头数据

1.获取请求头所有信息

request.headers

请求:
在这里插入图片描述

终端打印请求头
在这里插入图片描述

2.获取单个请求头信息

#基于get使用请求头原始属性名获取, User-Agent 客户端的网络代理工具名称

request.headers.get("User-Agent")

在这里插入图片描述

3.把原始属性名转换成小写下划线格式来获取

request.user_agent

在这里插入图片描述

#获取Accept

request.accept_mimetypes

在这里插入图片描述

#获取本次客户端请求的服务端地址

request.host

在这里插入图片描述

#获取本次客户端请求提交的数据格式

request.content_type

请求
在这里插入图片描述

终端打印
在这里插入图片描述

#获取本次客户端请求的uri路径

request.path

在这里插入图片描述
在这里插入图片描述

#获取本次客户端请求完整url地址

request.url

在这里插入图片描述

#获取本次客户端请求的服务端域名

request.root_url

在这里插入图片描述

#获取本次客户端的Http请求方法或请求动作

request.method

在这里插入图片描述

#获取本次客户端的IP地址

request.remote_addr

在这里插入图片描述

#获取本次客户端获取到的服务端信息

request.server

得到的是包含两个元素的元祖,第一个元素是服务端允许访问的ip地址,第二个是服务端口号
在这里插入图片描述

#获取本次客户端请求时,服务端的系统系统环境变量信息

request.environ

获取的全部数据如下:

{'wsgi.version': (1, 0), 'wsgi.url_scheme': 'http', 'wsgi.input': <_io.BufferedReader name=416>, 'wsgi.errors': <_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'>, 'wsgi.multithread': True, 'wsgi.multiprocess': False, 'wsgi.run_once': False, 'werkzeug.socket': <socket.socket fd=416, family=2, type=1, proto=0, laddr=('127.0.0.1', 5000), raddr=('127.0.0.1', 12712)>, 'SERVER_SOFTWARE': 'Werkzeug/3.0.1', 'REQUEST_METHOD': 'POST', 'SCRIPT_NAME': '', 'PATH_INFO': '/header', 'QUERY_STRING': '', 'REQUEST_URI': '/header', 'RAW_URI': '/header', 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_PORT': 12712, 'SERVER_NAME': '0.0.0.0', 'SERVER_PORT': '5000', 'SERVER_PROTOCOL': 'HTTP/1.1', 'HTTP_USER_AGENT': 'PostmanRuntime/7.37.0', 'HTTP_ACCEPT': '*/*', 'HTTP_POSTMAN_TOKEN': '3571e769-9ecf-44c1-bad0-5487c684f9eb', 'HTTP_HOST': '127.0.0.1:5000', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate, br', 'HTTP_CONNECTION': 'keep-alive', 'CONTENT_TYPE': 'multipart/form-data; boundary=--------------------------480267896765648122071509', 'CONTENT_LENGTH': '10720', 'werkzeug.request': <Request 'http://127.0.0.1:5000/header' [POST]>, 'werkzeug.debug.preserve_context': <built-in method append of list object at 0x00000202732AD900>}

在这里插入图片描述

自定义请求头信息获取
#根据自定义的请求头的键来获取

request.headers.get("company")

发送请求
在这里插入图片描述

获取自定义请求头
在这里插入图片描述

完整代码解析

import json

from flask import Flask, request


app = Flask(__name__)

@app.route("/header", methods=["get", "post", "put", "patch","delete"])
def header():
    """
    获取请求头等其他请求信息
    :return:
    """
    # # 获取请求头所有信息
    # print(request.headers, type(request.headers))
    #
    # """
    # 获取单个请求头信息
    # """
    # # 基于get使用请求头原始属性名获取, User-Agent 客户端的网络代理工具名称
    # print(request.headers.get("User-Agent"))  # PostmanRuntime/7.26.10
    # # 把原始属性名转换成小写下划线格式来获取
    # print(request.user_agent)   # PostmanRuntime/7.26.10
    #
    # # 获取本次客户端请求的服务端地址
    # print(request.host)  # 127.0.0.1:5000
    #
    # # 获取本次客户端请求提交的数据格式
    # print(request.content_type)  # multipart/form-data;
    #
    # # 获取本次客户端请求的uri路径
    # print(request.path)  # /header
    # # 获取本次客户端请求完整url地址
    # print(request.url)   # http://127.0.0.1:5000/header
    # # 获取本次客户端请求的服务端域名
    # print(request.root_url)  # http://127.0.0.1:5000/
    #
    # # 获取本次客户端的Http请求方法或请求动作
    # print(request.method)  # POST
    #
    # # 获取本次客户端的IP地址
    # print(request.remote_addr)  # 127.0.0.1
    #
    # # 获取本次客户端获取到的服务端信息
    # print(request.server)  # ('0.0.0.0', 5000)

    # 获取本次客户端请求时,服务端的系统系统环境变量信息
    # print(request.environ)

    """
    获取自定义请求头
    """
    print(request.headers.get("company"))  # flask.edu

    return "hello, flask"


if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000, debug=True)

总结:如上就是flask框中,请求体数据的获取方式,文件上传保存,请求头数据获取,自定哦请求头等详细使用方法,感兴趣的朋友一键三连,持续更新中!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1528327.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新媒体代运营是什么意思?CloudNEO:新媒体代运营的领先之选

新媒体代运营是什么意思&#xff1f; 随着互联网的迅速发展和普及&#xff0c;新媒体已经成为了企业推广和营销的重要工具。在这个背景下&#xff0c;新媒体代运营应运而生&#xff0c;成为了企业实现品牌曝光、粉丝增长和内容传播的重要方式。那么&#xff0c;新媒体代运营到…

经纬恒润推出新一代快速控制原型产品 ControlBase_S

近年来&#xff0c;软件定义汽车的发展趋势在行业内已经达成共识&#xff0c;与此同时&#xff0c;产品越来越复杂&#xff0c;开发周期越来越短&#xff0c;给软件开发带来了极大的挑战。在软硬件解耦的背景下&#xff0c;如何提前进行软件架构、算法开发及验证&#xff0c;成…

LeetCode 热题 100 | 回溯(三)

目录 1 131. 分割回文串 2 51. N 皇后 菜鸟做题&#xff0c;语言是 C&#xff0c;感冒好了 ver. 1 131. 分割回文串 题眼&#xff1a;给你一个字符串 s&#xff0c;请你将 s 分割 成一些子串。 根据题眼可知&#xff0c;我们需要做的是将字符串 s 连续分割 为几段&#…

深度观察2024中国系统架构师大会(SACC)

今年的中国系统架构师大会&#xff08;SACC&#xff09;在我所在的城市广州举办&#xff0c;很荣幸受邀参加。这次能接触到国内最优秀的架构师&#xff0c;学习他们的架构思想和行业经验。对我而言非常有意义。 大会分为上下午共4场&#xff0c;我参加了上午的多云多活架构设计…

Altair® Activate® 多学科系统仿真

Altair Activate 多学科系统仿真 Altair Activate 是一个开放且灵活的集成平台&#xff0c;用于系统仿真综合系统。Altair Activate 基于针对信号块、面向对象的物理组件、电气和电子系统的混合框图建模环境&#xff0c;支持在整个开发周期中进行多物理场分析。 全面支持 数学…

目标检测——PP-YOLOE算法解读

PP-YOLO系列&#xff0c;均是基于百度自研PaddlePaddle深度学习框架发布的算法&#xff0c;2020年基于YOLOv3改进发布PP-YOLO&#xff0c;2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet&#xff0c;2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列&#xff0c;所以放一起解…

针对元宇宙概念的兴起,普通人能不能参与?

元宇宙是一种虚拟现实空间&#xff0c;由数字技术构建&#xff0c;让人们可以在其中进行交互和沟通。通俗点说&#xff0c;元宇宙就像是一个类似于《黑镜》剧集中的“星空游乐园”的虚拟世界&#xff0c;我们可以在其中自由探索、玩乐、交互、创造。 在元宇宙中&#xff0c;我们…

【虚拟化简介】

文章目录 虚拟化简介什么是虚拟化&#xff1f;Hypervisor概念Hypervisor模型 虚拟化技术的分类软件虚拟化和硬件虚拟化软件虚拟化技术硬件虚拟化技术 参考资料 虚拟化简介 什么是虚拟化&#xff1f; CPU处理能力的飞速提升。 它的另一面也就意味着&#xff0c; 个人单独拥有一…

没有在中国境内注册,但是在境内开展业务,或向境内提供产品或服务的,是否属于境内运营?

没有在中国境内注册&#xff0c;但是在境内开展业务&#xff0c;或向境内提供产品或服务的&#xff0c;是否属于境内运营&#xff1f; 判断是否属于“境内运营”&#xff0c;不以是否在境内注册为判断依据&#xff0c;如果没有在我国境内注册的网络运营者&#xff0c;但在我国境…

基于HSV色度空间的图像深度信息提取算法FPGA实现,包含testbench和MATLAB辅助验证程序

目录 1.算法运行效果图预览 ​编辑2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将FPGA结果导入到matlab显示结果如下&#xff1a; matlab的对比测试结果如下&#xff1a; 2.算法运行软件版本 vivado2019.2 matlab2022a…

FMEA可以应用在什么行业——FMEA软件

免费试用FMEA软件-免费版-SunFMEA FMEA&#xff0c;即故障模式与影响分析&#xff08;Failure Modes and Effects Analysis&#xff09;&#xff0c;是一种预防性的质量工具&#xff0c;用于识别产品或过程中潜在的故障模式&#xff0c;评估其对系统的影响&#xff0c;并优先排…

Python对象作为参数传递到函数/方法的机制

以代码为例 class Person:name Noneage None# 分析对象作为参数传递到函数/方法的机制 def f1(person):print(f"2. person的地址&#xff1a;{id(person)}")person.name "james"person.age 1p1 Person()p1.name "jordan" p1.age 21 pri…

24计算机考研调剂 | 【官方】桂林理工大学(11自命题、22自命题)

桂林理工大学信息工程与科学学院招收调剂 考研调剂补充信息 一、招收专业 计算机科学与技术&#xff08;学硕&#xff09;、软件工程&#xff08;学硕&#xff09;、计算机技术&#xff08;专硕&#xff09;、人工智能&#xff08;专硕&#xff09;、软件工程&#xff08;专…

使用 Python 编写网络爬虫:从入门到实战

网络爬虫是一种自动化获取网页信息的程序&#xff0c;通常用于数据采集、信息监控等领域。Python 是一种广泛应用于网络爬虫开发的编程语言&#xff0c;具有丰富的库和框架来简化爬虫的编写和执行过程。本文将介绍如何使用 Python 编写网络爬虫&#xff0c;包括基本原理、常用库…

C语言之我对结构体与联合体的认识

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

APP广告变现初期,广告测试怎么做?

广告变现能给应用带来收入增长的一条非常有效的途径&#xff0c;同时可以帮助变现困难的产品类型最快实现盈利&#xff0c;例如付费下载、工具类产品等。 广告测试是APP广告变现中必不可少的一步&#xff0c;广告测试可以用来验证增减广告位会不会引起用户反感、对接广告平台能…

如何解决MySQL死锁(看懂MySQL锁日志)

有时候系统在生产运行着&#xff0c;会突然爆出 [40001][1213] Deadlock found when trying to get lock; try restarting transaction 这个时候每个人都会很紧张&#xff0c;因为死锁会影响DB性能&#xff0c;严重时甚至拖垮整个系统。在实际的环境中&#xff0c;很多服务会共…

JMeter压测SpringBoot项目

压力测试架构图如下: 配置JMeter 在JMeter的bin目录,双击jmeter.bat 新建一个测试计划,并右键添加线程组: 进行配置 一共会发生4万次请求。 ctrl + s保存; 添加http请求: 配置http请求: 配置断言,来判断当前请求是否成功: 正常响应如下:

EtherCAT开源主站 IGH 介绍及主站伺服控制过程

目录 前言 IGH EtherCAT主站介绍 主要特点和功能 使用场景 SOEM 主站介绍 SOEM 的特点和功能 SOEM 的使用场景 IGH 主站 和 SOEM对比 1. 功能和复杂性 2. 资源消耗和移植性 3. 使用场景 EtherCAT 通信原理 EtherCAT主站控制伺服过程 位置规划模式 原点复归模式…

金融知识分享系列之:ATR指标

金融知识分享系列之&#xff1a;ATR指标 一、ATR指标二、指标原理三、海龟交易法应用1.计算开仓数量2.制定止损/加仓规则 四、ATR指标总结 一、ATR指标 利用ATR指标计算仓位&#xff0c;设置止损的规则名称&#xff1a;平均真实波动幅度参数&#xff1a;(默认14)组成&#xff…