Flask get post请求

news2024/11/25 11:31:08

Flask get &post请求

  • 一、环境描述
  • 二、初始化flask 程序
  • 三、get请求
    • 3.1 代码
    • 3.2 分析
    • 3.3 验证
    • 3.4 请求结果
  • 四、post请求
    • 4.1 代码
    • 4.2 分析
    • 4.3 验证
      • 4.3.1 postman 请求头application/json参数
      • 4.3.2 postman 请求头application/x-www-form-urlencoded参数
      • 4.3.3 postman 请求头multipart/form-data参数
      • 4.3.4 request.get_data()解析参数
  • 五、总结
  • 六、遗留问题

一、环境描述

python:3.8.0
flask: 2.3.2
postman:9.12.2

Flask delete&put请求传送门:FLASK DELETE&PUT

二、初始化flask 程序

from flask import Flask, request

app = Flask(__name__)


@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'
    

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

  • 0.0.0.0: 由于我使用的是 虚拟机,所以指定同一局域网中可反问
  • debug:开启debug模式,修改程序后会自动部署,无需重启程序

三、get请求

3.1 代码

from flask import Flask, request

app = Flask(__name__)


@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'


# get 获取请求参数
@app.route('/user', methods=['GET'])
def get_user_info():
    # user_name = request.args.get('user_name')
    user_name = request.values.get("user_name")
    # 将数据再次打包为 JSON 并传回
    res = {"user_name": user_name}
    return res


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

3.2 分析

  1. 请求举例:http://ip:5000/user?user_name=neil

  2. 限定请求只响应路径为 /user时的get请求

    @app.route('/user', methods=['GET'])
    def method():
      ...
    
    • 使用/user限制请求响应的路径
    • 使用methods进行请求方式限定
  3. 获取参数的方式

    # 获取get ?后参数的方法
    request.args.get('user_name')
    request.values.get('user_name')
    

3.3 验证

  1. postman 请求参数
    请添加图片描述

  2. postman header 如下(使用默认)
    请添加图片描述

3.4 请求结果

在这里插入图片描述

四、post请求

4.1 代码

from flask import Flask, request

app = Flask(__name__)


@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'


# post 获取请求参数
@app.route('/user', methods=['POST'])
def post_user_info():
    # postman 使用默认请求头application/json
    user_info = request.get_json()
    res = {"user_name": user_info.get("user_name")}

    # postman 使用application/x-www-form-urlencoded请求 
    # 注:此测试得也可解析multipart/form-data请求
    # user_name = request.values.get('user_name')
    # res = {"user_name": user_name}

    # postman 使用multipart/form-data请求
    # 注:此测试得也可解析application/x-www-form-urlencoded请求
    # user_name = request.form.get('user_name')
    # user_name = request.form['user_name']
    # res = {"user_name": user_name}
    
    # postman 使用上述三种都可以收到内容,但是返回值为bytes类型
    # user_info = request.get_data()
    # res = {"user_name": user_info.decode("utf-8")}

    return res

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

4.2 分析

  1. 请求举例:http://ip:5000/user

  2. 限定请求只响应路径为 /user时的post请求

    @app.route('/user', methods=['POST'])
    def method():
      ...
    
    • 使用/user限制请求响应的路径
    • 使用methods进行请求方式限定
  3. 获取参数的方式有四种

    1. request.get_json():可解析 请求头application/json的参数
    2. request.values.get('user_name'): 可解析请求头为application/x-www-form-urlencoded & multipart/form-data的参数
    3. request.form.get('user_name')&request.form['user_name']: 可解析请求头为multipart/form-data &application/x-www-form-urlencoded的参数
    4. request.get\_data():怎样的请求都可以拿到参数,但是默认初始解析返回值是bytes的对象

4.3 验证

4.3.1 postman 请求头application/json参数

  1. 设置参数
    在这里插入图片描述

  2. header内容
    在这里插入图片描述

  3. 请求结果
    在这里插入图片描述

4.3.2 postman 请求头application/x-www-form-urlencoded参数

  1. 设置参数
    在这里插入图片描述

  2. header内容
    在这里插入图片描述

  3. 请求结果
    在这里插入图片描述

4.3.3 postman 请求头multipart/form-data参数

  1. 设置参数
    在这里插入图片描述
  2. header内容
    在这里插入图片描述
  3. 请求结果
    在这里插入图片描述

4.3.4 request.get_data()解析参数

  1. 请求multipart/form-data请求头内容
    在这里插入图片描述
  2. 请求 application/x-www-form-urlencoded请求头内容
    在这里插入图片描述
  3. 请求application/json请求头内容
    在这里插入图片描述

五、总结

  1. get请求

    GET把参数包含在URL中,访问时会在地址栏直接显示参数不安全,且参数大小比较小

  2. post请求

    参数通过request body传递,请求头的情况下需要不同的解析方式进行相关处理

六、遗留问题

  1. 为什么application/x-www-form-urlencoded & multipart/form-data 请求头可以相互解析相关参数?
    • x-www-form-urlencoded,表单默认的 Content-type 类型,支持 ASCII-text 文本内容
    • multipart/form-data,允许提交表单包含: files,non-ASCII-text,Binary 类型数据
    • 参考:https://learning.postman.com/docs/sending-requests/requests/

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

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

相关文章

【ESP32】Espressif-IDE及ESP-IDF安装

一、下载Espressif-IDE 2.10.0 with ESP-IDF v5.0.2 1.打开ESP-IDF 编程指南 2.点击快速入门–>安装–>手动安装–>Windows Installer–>Windows Installer Download 3.点击下载Espressif-IDE 2.10.0 with ESP-IDF v5.0.2 二、安装Espressif-IDE 2.10.0 wit…

Docker 全栈体系(七)

Docker 体系(高级篇) 五、Docker-compose容器编排 1. 是什么 Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调…

4、Linux驱动开发:设备-设备号设备号注册

目录 🍅点击这里查看所有博文 随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记…

Unity游戏源码分享-ARPG游戏Darklight.rar

Unity游戏源码分享-ARPG游戏Darklight.rar 玩法 项目地址:https://download.csdn.net/download/Highning0007/88105464

1.jquery遍历数组2.layui框架的理解

1.jquery遍历数组 2.layui框架的理解 layui.use(["form", "laydate"], 是使用 layui 框架中的模块加载方法 use 来加载并使用 form 和 laydate 这两个模块。 在 layui 框架中,可以使用 use 方法来加载所需的模块,然后使用这些模块…

[CrackMe]Chafe.1.exe的逆向及注册机编写

上手先试一下, 发现其没有对话框, 只有字符串, 搜索"Your serial is not valid"字符串 \ 上来就直接发现关键跳转, 难道这题这么简单吗? 仔细一看实际上远远要复杂 往上一翻发现没有生成serial key的代码, 而是看到了一个SetTimer, 时间间隔设置成了1ms, 之前输入…

访问:http://localhost:8070/actuator/bus-refresh 问题

1、请求发送不出去 原因: 自己 config-server端 application.yml 配置的端口号是8888,访问server修改为配置的端口号 2、请求报错405 几个解决办法: 1、版本问题变为busrefresh 2、bus-refresh加单引号或双引号尝试 3、加配置尝试&#xff1a…

嵌入式_GD32看门狗配置

嵌入式_GD32独立看门狗配置与注意事项 文章目录 嵌入式_GD32独立看门狗配置与注意事项前言一、什么是独立看门狗定时器(FWDGT)二、独立看门狗定时器原理三、独立看门狗定时器配置过程与注意事项总结 前言 使用GD3单片机时,为了提供了更高的安…

服务器数据恢复-Windows服务器RAID5数据恢复案例

服务器数据恢复环境: 一台服务器挂载三台IBM某型号存储设备,共64块SAS硬盘,组建RAID5磁盘阵列; 服务器操作系统:Windows Server;文件系统:NTFS。 服务器故障: 一台存储中的一块硬盘离…

STM32 串口学习(二)

要用跳线帽将PA9与RXD相连,PA10与TXD相连。 软件设计 void uart_init(u32 baud) {//UART 初始化设置UART1_Handler.InstanceUSART1; //USART1UART1_Handler.Init.BaudRatebound; //波特率UART1_Handler.Init.WordLengthUART_WORDLENGTH_8B; //字长为 8 位数据格式U…

Java语言跨平台执行的核心JVM

本文重点 在前面的课程中,我们介绍了java中的三层JDK->JRE->JVM,其中JVM称为Java的虚拟机,只是用来执行的,JRE是运行环境,要想在操作系统中运行,除了JVM还需要类库,JDK=JRE+开发的包和工具。本文就将介绍一下JVM究竟为何物? JVM 有的人会认为JVM是java中的东西…

29.双击喜欢

双击喜欢 html部分 <h3>双击喜欢这个图 <i style"color: red;" class"iconfont icon-xin"></i></h3> <small>你喜欢了 <span class"count">0</span> 次</small> <div class"area&quo…

【iOS】Cocoapods的安装以及使用

文章目录 前言一、Cocoapods的作用二、安装Cocoapods三、使用Cocoapods总结 前言 最近笔者在仿写天气预报App时用到了api调用数据&#xff0c;一般的基本数据类型我们用Xcode中自带的框架就可以转换得到。但是在和风天气api中的图标的格式为svg格式。 似乎iOS13之后Xcode中可…

Baumer工业相机堡盟工业相机如何通过BGAPI SDK获取相机当前实时帧率(C++)

Baumer工业相机堡盟工业相机如何通过BGAPISDK里函数来计算相机的实时帧率&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的帧率的技术背景Baumer工业相机的帧率获取方式CameraExplorer如何查看相机帧率信息在BGAPI SDK里通过函数获取相机帧率 Baumer工业相机通过BGAP…

去除重复字母(力扣)贪心 + 队列 JAVA

给你一个字符串 s &#xff0c;请你去除字符串中重复的字母&#xff0c;使得每个字母只出现一次。需保证 返回结果的字典序最小&#xff08;要求不能打乱其他字符的相对位置&#xff09;。 示例 1&#xff1a; 输入&#xff1a;s “bcabc” 输出&#xff1a;“abc” 示例 2&am…

【亲测可用】Linux上安装Redis教程

一、下载并解压Redis 1、执行下面的命令下载redis&#xff1a; wget https://download.redis.io/releases/redis-6.2.6.tar.gz 2、解压redis&#xff1a; tar xzf redis-6.2.6.tar.gz 3、移动redis目录&#xff0c;一般都会将redis目录放置到 /usr/local/redis目录&#xff1a…

如何利用设备数字化平台推动精益制造?

人工智能驱动技术的不断发展&#xff0c;尤其是基于机器学习的预测分析工具的使用&#xff0c;为制造业带来了全新的效率和价值水平。一直以来&#xff0c;精益生产&#xff08;也叫精益制造&#xff09;在制造业中扮演着重要角色&#xff0c;而现在通过与工业 4.0的融合&#…

rpc通信原理浅析

rpc通信原理浅析 rpc(remote procedure call)&#xff0c;即远程过程调用&#xff0c;广泛用于分布式或是异构环境下的通信&#xff0c;数据格式一般采取protobuf。 protobuf&#xff08;protocol buffer&#xff09;是google 的一种数据交换的格式&#xff0c;它独立于平台语…

pytest---环境切换(base-url)

前言 前面小编介绍了如何通过pytest的插件来实现自动化测试的环境的切换&#xff0c;当时使用的方法是通过钩子函数进行获取命令行参数值&#xff0c;然后通过提前配置好的参数进行切换测试环境地址&#xff0c;今天小编再次介绍一种方法&#xff0c;通过pytest的插件&#xff…

three.js入门二:相机的zoom参数

环境&#xff1a; threejs&#xff1a;129 &#xff08;在浏览器的控制台下输入&#xff1a; window.__THREE__即可查看版本&#xff09;vscodewindowedge 透视相机或正交相机都有一个zoom参数&#xff0c;它可以用来将相机排到的内容在canvas上缩放显示。 注意&#xff1a;…