Python flask框架请求体数据、文件上传、请求头信息获取方式详解

 更新时间:2024年03月20日 10:12:03   作者:景天科技苑  
这篇文章主要介绍了Python flask框架请求体数据、文件上传、请求头信息获取方式详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

获取请求体数据

与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框中,请求体数据的获取方式,文件上传保存,请求头数据获取,自定义请求头等详细使用方法,持续更新中!!!

到此这篇关于Python flask框架请求体数据、文件上传、请求头信息获取方式的文章就介绍到这了,更多相关Python flask请求体数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python如何同时读写Excel

    Python如何同时读写Excel

    这篇文章主要介绍了Python如何同时读写Excel问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 利用Python的Django框架中的ORM建立查询API

    利用Python的Django框架中的ORM建立查询API

    这篇文章主要介绍了利用Python的Django框架中的ORM建立查询API,对Managers和QuerySets进行了着重介绍,需要的朋友可以参考下
    2015-04-04
  • Python 元组(Tuple)操作详解

    Python 元组(Tuple)操作详解

    Python的元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号,元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可
    2014-03-03
  • Django框架下在URLconf中指定视图缓存的方法

    Django框架下在URLconf中指定视图缓存的方法

    这篇文章主要介绍了Django框架下在URLconf中指定视图缓存的方法,在Python丰富多彩的web框架中,Django是最具人气的一个,需要的朋友可以参考下
    2015-07-07
  • Python类的定义和使用详情

    Python类的定义和使用详情

    这篇文章主要介绍了Python类的定义与使用,类名只要是一个合法的标识符即可,但这仅仅满足的是 Python 的语法要求:如果从程序的可读性方面来看,Python 的类名必须是由一个或多个有意义的单词连缀而成的,下文基于这些基础内容展开介绍,需要的朋友可以参考一下
    2022-03-03
  • python psutil模块使用方法解析

    python psutil模块使用方法解析

    这篇文章主要介绍了python psutil模块使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python使用eel模块创建GUI应用程序

    Python使用eel模块创建GUI应用程序

    在Python中,有许多库和模块可以用来创建图形用户界面(GUI)应用程序,其中一个流行的选择是使用eel模块,下面小编就来为大家详细介绍一下如何使用eel模块创建GUI应用程序吧
    2023-12-12
  • 基于python实现matlab filter函数过程详解

    基于python实现matlab filter函数过程详解

    这篇文章主要介绍了基于python实现matlab filter函数过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python json.loads兼容单引号数据的方法

    python json.loads兼容单引号数据的方法

    今天小编就为大家分享一篇python json.loads兼容单引号数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python Pandas 获取列匹配特定值的行的索引问题

    Python Pandas 获取列匹配特定值的行的索引问题

    这篇文章主要介绍了Python Pandas 获取列匹配特定值的行的索引问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07

最新评论