flask获取post请求参数

文章目录

  • flask获取post请求参数
    • 概述
    • 1. `application/json`
      • http 请求报文格式如下:
      • 使用curl
      • postman 请求
      • flask如何获取请求体呢
    • 2. `application/x-www-form-urlencoded`
      • 使用curl 请求
      • flask如何获取请求体呢
    • 3. `multipart/form-data`
      • 使用curl 请求
      • postman 请求
      • flask如何获取请求体呢
    • 4. text/plain
      • http 请求报文如下
      • 使用curl 请求
      • postman 请求
      • flask如何获取请求体呢
      • 总结
      • 参考文档

今天 我们继续来说一下, 使用flask web application, 如何获取post 请求参数的。

概述

对于post请求 有几种方式。 Content-Type 实体头部用于指示资源的MIME类型 media type 。

content-type是http请求头的字段。作为请求头时(post或者put),客户端告诉服务器实际发送的数据类型。

对于不同的content-type 发送的数据不太一样,对于服务器端,需要如何获取数据,以及正确解析的方法也是不一样的。

下面列出常用的几种 Content-Type

  • application/json

  • application/x-www-form-urlencoded

  • multipart/form-data

  • text/plain

  • text/xml

  • text/html

1. application/json

Content-Type 以这种方式的api ,目前来说还是比较多的,现在主流前后端交互的api,使用application/json 这种方式 传输数据 非常常见。 主要得意于json 的发展,以及前后端完善的库支持,使得这种方式 比较常见。

这里以login 登录接口为例

http 请求报文格式如下:

POST /login HTTP/1.1
Host: 127.0.0.1:5000
Content-Type: application/json
Content-Length: 59{"username":"frank","password":"jsdofjdsofjsdo"
}

使用curl

curl --location --request POST 'http://127.0.0.1:5000/login'
--header 'Content-Type: application/json'
--data-raw '{"username":"frank","password":"jsdofjdsofjsdo"
}'

postman 请求

flask如何获取请求体呢

对于这种请求方式 ,flask 如何获取请求的body 的内容呢?

# main.py
from flask import Flask
from flask import request
from flask import jsonify
# pip install pysimple-log
from simplelog import loggerapp = Flask(__name__)@app.route('/login', methods=[ 'POST'])
def login():if request.method == 'POST':# 这样获取就可以了 json_data = request.jsonlogger.info(f"json_data:{json_data}")return jsonify(json_data)if __name__ == '__main__':app.run(host='0.0.0.0', port=5000, debug=True)

我们直接可以通过, flask 提供的request对象获取参数。 request.json 通过这个属性 就可以获取到 request body 的内容了。是不是很方便呢。

2. application/x-www-form-urlencoded

这种方式是 浏览器原生form表单默认的提交方式

http 请求报文格式

POST /login HTTP/1.1
Host: 127.0.0.1:5000
Content-Type: application/x-www-form-urlencoded
Content-Length: 38username=frank&password=jsdofjdsofjsdo

使用curl 请求

curl --location --request POST 'http://127.0.0.1:5000/login'
--header 'Content-Type: application/x-www-form-urlencoded'
--data-urlencode 'username=frank'
--data-urlencode 'password=jsdofjdsofjsdo'

flask如何获取请求体呢

对于这中content-type 我们可以使用 request.form 返回一个不可变的字典类型。 然后就可以获取 request body 啦。

# 省略 ...
@app.route('/login', methods=[ 'POST'])
def login():if request.method == 'POST':json_data = request.formlogger.info(f"json_data:{json_data}")return jsonify(json_data)

3. multipart/form-data

这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 form 表单的enctype 等于 multipart/form-data。直接来看一个请求示例:

这里我只是演示 一下,对应 http报文

http 请求报文

POST /login HTTP/1.1
Host: 127.0.0.1:5000
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Length: 239----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="username"frank
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="password"111111sfsfsafsafas==
----WebKitFormBoundary7MA4YWxkTrZu0gW

使用curl 请求

curl --location --request POST 'http://127.0.0.1:5000/login'
--form 'username="frank"'
--form 'password="111111sfsfsafsafas=="'

postman 请求

flask如何获取请求体呢

对于这种方式还是可以通过 request.from 来获取参数

# ... 省略
@app.route('/login', methods=[ 'POST'])
def login():if request.method == 'POST':json_data = request.formlogger.info(f"json_data:{json_data}")return jsonify(json_data)

4. text/plain

用纯文本发送数据

http 请求报文如下

POST /login HTTP/1.1
Host: 127.0.0.1:5000
Content-Type: text/plain
Content-Length: 59{"username":"frank","password":"jsdofjdsofjsdo"
}

使用curl 请求

curl --location --request POST 'http://127.0.0.1:5000/login'
--header 'Content-Type: text/plain'
--data-raw '{"username":"frank","password":"jsdofjdsofjsdo"
}'

postman 请求

flask如何获取请求体呢

flask 如何正常接收数据呢? 原生的请求数据会放在 request.data 里面,类型是bytes,需要转成字符串,然后通过json 模块转成字典。

import json
from flask import Flask
from flask import request
from flask import jsonify
# pip install pysimple-log
from simplelog import loggerapp = Flask(__name__)@app.route('/login', methods=['POST'])
def login():if request.method == 'POST':# bytes 类型raw_data = request.datalogger.info(f'raw_data:{raw_data}')json_data = json.loads(raw_data.decode())logger.info(f"json_data:{json_data},type:{type(json_data)}")return jsonify(json_data)

结果如下:

可以看出可以正常解析数据了,并且以json 的形式返回了。

总结

本文主要说明了使用flask 框架,如果获取常见的post请求body 数据,今天的分享就到这里了。

参考文档

accessing-request-data

POST 方法的content-type类型

content-type mdn

分享快乐,留住感动. ‘2022-01-09 12:06:45’ --frank

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

flask获取post请求参数相关推荐

  1. 拦截器获取请求参数post_SpringBoot拦截器如何获取http请求参数

    1.1.获取http请求参数是一种刚需 我想有的小伙伴肯定有过获取http请求的需要,比如想 前置获取参数,统计请求数据 做服务的接口签名校验 敏感接口监控日志 敏感接口防重复提交 等等各式各样的场景 ...

  2. Go gin获取GET请求参数

    Go gin获取GET请求参数 一.带参数的路由:路径中直接加上参数值 e.g. http://127.0.0.1:8080/user/hallen 1.第一种情况:使用占位符: ,必须得指定这个路径 ...

  3. springboot获取多个请求参数_springboot获取URL请求参数的多种方式

    1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交. /** * 1.直接把表单的参数写在Controller相应的方法的形参中 * @pa ...

  4. express html文件接收路由参数,express 获取post 请求参数

    在 Express 中没有内置获取表单 POST 请求体的 API , 我们需要添加第三方插件库 安装: npm install --save body-parser 配置: var bodyPars ...

  5. java后端获取前端请求参数

    纯servlet获取前端请求参数 测试页面 <body><h2>输入帐号密码</h2><form action="test" method ...

  6. go获取get请求参数

    代码 package mainimport ("encoding/json""fmt""log""net/http" ) ...

  7. java get请求 参数_HttpServletRequest获取GET请求参数5种方法

    首页 > Java Web > SpringMvc应用 > HttpServletRequest HttpServletRequest获取GET请求参数5种方法 HttpServle ...

  8. springboot拦截请求路径_SpringBoot拦截器如何获取http请求参数

    1.1.获取http请求参数是一种刚需 我想有的小伙伴肯定有过获取http请求的需要,比如想 前置获取参数,统计请求数据 做服务的接口签名校验 敏感接口监控日志 敏感接口防重复提交 等等各式各样的场景 ...

  9. springboot获取URL请求参数的几种方法

    原文地址:http://www.cnblogs.com/xiaoxi/p/5695783.html 1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于pos ...

最新文章

  1. 【组合数学】生成函数 ( 使用生成函数求解不定方程解个数 )
  2. 李宏毅深度学习——梯度下降
  3. python pandas dataframe 转json_python-将嵌套的json转换为pandas dataframe
  4. 关于虹软人脸识别SDK的接入
  5. python六角形的绘制 编程_利用Python的turtle重复画六边形
  6. AI「抄」代码无罪?GitHub Copilot拿用户的开源代码改一改就去挣钱!
  7. oracle 多个with as
  8. Firefox和Chrome浏览器导出书签
  9. oracle退税率后台表,Oracle ERP表信息整理(AP).doc
  10. Postman 汉化教程
  11. HIVE 面试题总结
  12. 流光快门Matlab,华为手机流光快门太好玩了!这几个特效分分钟拍出大片感
  13. buuctf——(HDCTF2019)Maze
  14. easyScholar简介
  15. 如何自学VR虚拟现实技术?VR简单上手教程
  16. 2019年南京大学计算机研究生复试分数线,南京大学2019年硕士研究生复试基本分数线...
  17. 在word里面插入对象显示不全怎么办
  18. win10u盘被写保护怎么解除_win10系统所有usb都被写保护怎么取消_win10系统usb被写保护怎么办...
  19. 关于 GK盘,扩盘在storage和os两侧的联系
  20. 初中数学503个必考知识点_初中数学:21个必考知识点+重难点!打印背熟,3年不下130+!...

热门文章

  1. 机器学习与分布式机器学习_我如何学习机器学习
  2. python字符串转整数_如何在Python中将字符串转换为整数
  3. java中Collection集合成员花名册
  4. tf.zeros_initializer
  5. SceneKit_高级08_天空盒子制作
  6. DIR命令输出文件名,只显示文件名,输出到文件,按要求过滤文件名
  7. 孝顺能生孝顺子, 孝顺子弟必明贤.
  8. co01设置错误消息_win10提示“调制解调器报告了一个错误”怎么办
  9. 线性规划原问题与对偶问题
  10. 彻底变换PreferenceFragment样式和全局设置字体样式的解决方案