徐高翔的个人网站

Flask处理POST请求

2016-12-15

软硬件环境

  • ubuntu 18.04 64bit
  • anaconda with python 3.6
  • flask
  • postman

前言

在使用flask框架进行web开发时,经常需要处理 POST 请求, 有的是客户发送过来的 json 格式的数据,有的时候则是文件,那么在服务端就需要flask能够处理这些请求,当然,答案也是肯定的。

flask处理上传文件

这里以接收图片为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from flask import Flask, request
from werkzeug.utils import secure_filename

flask_app = Flask(__name__)
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg'])

def allowed_file(filename) :
return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS

@flask_app.route('/processPOSTFile', methods = ['POST'])
def processPOSTFile() :
'''
接收客户端post过来的图片
:return:
'''

# multipart/form-data file --> key
file = request.files['post']
if file and allowed_file(file.filename) :
filename = secure_filename(file.filename)

file.save('test.jpg')
return 'POST success.'
else:
return 'POST failed.'

我们可以使用 Postman 这个工具进行客户端行为的模拟。选择 Body 下的 form-data, key 值与 request.files['post']里的值保持一致, Value 类型选择 File

flask_json_file_02

flask处理上传的json信息

假定上传的数据格式为

1
{"name":"xugaoxiang", "website":"https://xugaoxiang.com"}

flask端可以这样实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from flask import Flask, request

@flask_app.route('/processPOSTJSON', methods = ['POST'])
def processPOSTJSON() :
'''
处理客户端上传的JSON数据
:return:
'''

form_request = request.form

json_of_metadatas = form_request.to_dict(flat = False)

# type(metadata) --> string
metadata = json_of_metadatas['json'][0]

# convert string to dictionary
metadata_dict = ast.literal_eval(str(metadata))

name = metadata_dict['name']
site = metadata_dict['website']

print('\nMy name: {}, personal site: {}\n'.format(name, site))

Postman 上模拟,Value 的值设成 Text, 然后写上整个 JSON 的值。

flask_json_file_03

flask同时处理json和上传的文件

代码部分就是上面两者的结合,没什么可说的,Postman 模拟分成两块, 如下

flask_json_file_04

参考资料

推荐文章(由hexo文章推荐插件驱动)

使用支付宝打赏
使用微信打赏

请博主喝咖啡!