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 请求头可以相互解析相关参数?
相关推荐
掘根1 分钟前
【Qt】绘图
开发语言·qt
咖啡续命又一天21 分钟前
python 自动化采集 ChromeDriver 安装
开发语言·python·自动化
huohaiyu1 小时前
synchronized (Java)
java·开发语言·安全·synchronized
_OP_CHEN1 小时前
C++基础:(九)string类的使用与模拟实现
开发语言·c++·stl·string·string类·c++容器·stl模拟实现
蓝天智能1 小时前
QT MVC中View的特点及使用注意事项
开发语言·qt·mvc
松果集1 小时前
【1】数据类型2
python
且慢.5892 小时前
命令行的学习使用技巧
python
木觞清2 小时前
喜马拉雅音频链接逆向实战
开发语言·前端·javascript
海琴烟Sunshine2 小时前
leetcode 66.加一 python
python·算法·leetcode
wuxuanok2 小时前
苍穹外卖 —— 公共字段填充
java·开发语言·spring boot·spring·mybatis