Flask get &post请求

Flask get &post请求

  • 一、环境描述
  • [二、初始化flask 程序](#二、初始化flask 程序)
  • 三、get请求
    • [3.1 代码](#3.1 代码)
    • [3.2 分析](#3.2 分析)
    • [3.3 验证](#3.3 验证)
    • [3.4 请求结果](#3.4 请求结果)
  • 四、post请求
    • [4.1 代码](#4.1 代码)
    • [4.2 分析](#4.2 分析)
    • [4.3 验证](#4.3 验证)
      • [4.3.1 postman 请求头application/json参数](#4.3.1 postman 请求头application/json参数)
      • [4.3.2 postman 请求头application/x-www-form-urlencoded参数](#4.3.2 postman 请求头application/x-www-form-urlencoded参数)
      • [4.3.3 postman 请求头multipart/form-data参数](#4.3.3 postman 请求头multipart/form-data参数)
      • [4.3.4 request.get_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 程序

python 复制代码
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 代码

python 复制代码
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请求

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

    python 复制代码
    # 获取get ?后参数的方法
    request.args.get('user_name')
    request.values.get('user_name')

3.3 验证

  1. postman 请求参数

  2. postman header 如下(使用默认)

3.4 请求结果

四、post请求

4.1 代码

python 复制代码
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请求

    python 复制代码
    @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 请求头可以相互解析相关参数?
相关推荐
念念01073 小时前
数学建模竞赛中评价类相关模型
python·数学建模·因子分析·topsis
四维碎片3 小时前
【Qt】线程池与全局信号实现异步协作
开发语言·qt·ui·visual studio
IT码农-爱吃辣条3 小时前
Three.js 初级教程大全
开发语言·javascript·three.js
云天徽上3 小时前
【数据可视化-94】2025 亚洲杯总决赛数据可视化分析:澳大利亚队 vs 中国队
python·信息可视化·数据挖掘·数据分析·数据可视化·pyecharts
☺����3 小时前
实现自己的AI视频监控系统-第一章-视频拉流与解码2
开发语言·人工智能·python·音视频
染翰4 小时前
lua入门以及在Redis中的应用
开发语言·redis·lua
王者鳜錸4 小时前
PYTHON让繁琐的工作自动化-函数
开发语言·python·自动化
兔老大RabbitMQ4 小时前
git pull origin master失败
java·开发语言·git
tt5555555555555 小时前
C/C++嵌入式笔试核心考点精解
c语言·开发语言·c++
xiao助阵5 小时前
python实现梅尔频率倒谱系数(MFCC) 除了傅里叶变换和离散余弦变换
开发语言·python