当前位置:网站首页>flask获取post请求参数
flask获取post请求参数
2022-08-02 00:19:00 【m0_67392811】
flask获取post请求参数
文章目录
今天 我们继续来说一下, 使用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 logger
app = Flask(__name__)
@app.route('/login', methods=[ 'POST'])
def login():
if request.method == 'POST':
# 这样获取就可以了
json_data = request.json
logger.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: 38
username=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.form
logger.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.form
logger.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 logger
app = Flask(__name__)
@app.route('/login', methods=['POST'])
def login():
if request.method == 'POST':
# bytes 类型
raw_data = request.data
logger.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 数据,今天的分享就到这里了。
参考文档
分享快乐,留住感动. ‘2022-01-09 12:06:45’ --frank
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- 期货开户手续费加一分是主流
- html+css+php+mysql实现注册+登录+修改密码(附完整代码)
- 辨析内存函数memset、memcmp、memmove以及memcpy
- IDEA如何运行web程序
- 好的期货公司开户让人省心省钱
- js中内存泄漏的几种情况
- C language character and string function summary (2)
- IDEA版Postman插件Restful Fast Request,细节到位,功能好用
- MLX90640 红外热成像仪测温传感器模块开发笔记(十) 成果展示-红眼睛相机
- Realize deletion - a specified letter in a string, such as: the string "abcd", delete the "a" letter in it, the remaining "bcd", you can also pass multiple characters to be deleted, and pass "ab" can
猜你喜欢

IDEA版Postman插件Restful Fast Request,细节到位,功能好用

H5画布 canvas(一)canvas简介、绘制圆形矩形、案例饼状图绘制

思维导图,UML在线画图工具

html+css+php+mysql实现注册+登录+修改密码(附完整代码)

【CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!)(A~D)】

Kunpeng compile and debug plug-in actual combat

146. LRU cache

第 45 届ICPC亚洲区域赛(上海)G-Fibonacci

Knowing the inorder traversal of the array and the preorder traversal of the array, return the postorder history array

H5页面调用微信授权获取code
随机推荐
Interview: Briefly describe a project you are involved in
扫雷小游戏
理解分布式系统中的缓存架构(下)
21.数据增强
GateWay实现负载均衡
Automatic conversion of Oracle-style implicit joins to ANSI JOINs using jOOQ
go mode tidy出现报错go warning “all“ matched no packages
These 4 computer notepad software, you have to try
22.卷积神经网络实战-Lenet5
632. Minimum interval
Redis的集群模式
23.卷积神经网络实战-ResNet
Maxwell 一款简单易上手的实时抓取Mysql数据的软件
Test Cases: Four-Step Test Design Approach
如何期货开户和选择期货公司?
期货开户如何确定期货公司正规性?
信息收集之目录扫描-dirbuster
flowable工作流所有业务概念
管理基础知识18
鲲鹏编译调试插件实战