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 请求头可以相互解析相关参数?
相关推荐
Flittly33 分钟前
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(3)TodoWrite (待办写入)
python·agent
千寻girling5 小时前
一份不可多得的 《 Django 》 零基础入门教程
后端·python·面试
stark张宇5 小时前
构建第一个AI聊天机器人:Flask+DeepSeek+Postgres实战
人工智能·postgresql·flask
databook8 小时前
探索视觉的边界:用 Manim 重现有趣的知觉错觉
python·动效
明月_清风9 小时前
Python 性能微观世界:列表推导式 vs for 循环
后端·python
明月_清风9 小时前
Python 性能翻身仗:从 O(n) 到 O(1) 的工程实践
后端·python
helloweilei1 天前
python 抽象基类
python
用户8356290780511 天前
Python 实现 PPT 转 HTML
后端·python
zone77391 天前
004:RAG 入门-LangChain读取PDF
后端·python·面试
zone77391 天前
005:RAG 入门-LangChain读取表格数据
后端·python·agent