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 请求头可以相互解析相关参数?
相关推荐
滑雪的企鹅.几秒前
Kotlin云头条技术点剖析(项目复习02)——用户协议页面
android·开发语言·kotlin
小羊羔heihei5 分钟前
Python编程实战:12道趣味算法题
笔记·python·学习·其他·算法·学习方法·交友
龙腾AI白云18 分钟前
基于知识图谱的故障推理方法与算法
自然语言处理·flask·virtualenv·pygame
南 阳22 分钟前
Python从入门到精通day59
开发语言·python·php
JMchen12323 分钟前
Android NDK开发从入门到实战:解锁应用性能的终极武器
android·开发语言·c++·python·c#·android studio·ndk开发
weixin_4577600024 分钟前
深入解析 Beam Search:从原理到实践的高效解码算法
python·算法
会飞De琥珀41 分钟前
java工具类,字符串转时间
java·开发语言
小羊羔heihei1 小时前
Python列表操作全攻略
经验分享·笔记·python·学习·其他·交友
源码潇潇和逸逸1 小时前
独立部署高校圈子平台:PHP+UniApp打造社交+交易+服务一站式校园解决方案
开发语言·uni-app·php
2501_908329851 小时前
实战:用OpenCV和Python进行人脸识别
jvm·数据库·python