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 请求头可以相互解析相关参数?
相关推荐
测试开发-学习笔记11 分钟前
代码详细解释
python
u01196082321 分钟前
ray-k8s部署
python
luck_bor24 分钟前
File类&递归作业
java·开发语言
PAK向日葵3 小时前
我用 C++ 写了一个轻量级 Python 虚拟机,刚刚开源
c++·python·开源
努力努力再努力wz4 小时前
【Qt入门系列】:按钮组件全解析:从 QAbstractButton 到快捷键事件、单选与复选机制
c语言·开发语言·数据结构·c++·git·qt·github
财经资讯数据_灵砚智能4 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年5月26日
大数据·人工智能·python·信息可视化·自然语言处理·ai编程·灵砚智能
skywalk81634 小时前
言知(Yanzhi)系统提升建议报告和完工报告 by AutoCoder
开发语言·编程
yunn_5 小时前
单例模式两种实现方法
开发语言·c++·单例模式
我材不敲代码5 小时前
Python基础:列表详解、增删改查及常用高阶操作
开发语言·windows·python
AI玫瑰助手5 小时前
Python运算符:成员运算符(in/not in)的使用场景
开发语言·python·信息可视化