Flask处理POST请求

/

图片来自https://www.deviantart.com/eclectixx/art/Froste-Drake-Leather-Flask-374235622

软硬件环境

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

前言

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

flask处理上传文件

这里以接收图片为例

  1. from flask import Flask, request
  2. from werkzeug.utils import secure_filename
  3. flask_app = Flask(__name__)
  4. ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg'])
  5. @flask_app.route('/processPOSTFile', methods = ['POST'])
  6. def processPOSTFile() :
  7. '''
  8. 接收客户端post过来的图片
  9. :return:
  10. '''
  11. # multipart/form-data file --> key
  12. file = request.files['post']
  13. if file and allowed_file(file.filename) :
  14. filename = secure_filename(file.filename)
  15. file.save('test.jpg')
  16. return 'POST success.'
  17. else:
  18. 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. from flask import Flask, request
  2. @flask_app.route('/processPOSTJSON', methods = ['POST'])
  3. def processPOSTJSON() :
  4. '''
  5. 处理客户端上传的JSON数据
  6. :return:
  7. '''
  8. form_request = request.form
  9. json_of_metadatas = form_request.to_dict(flat = False)
  10. # type(metadata) --> string
  11. metadata = json_of_metadatas['json'][0]
  12. # convert string to dictionary
  13. metadata_dict = ast.literal_eval(str(metadata))
  14. name = metadata_dict['name']
  15. site = metadata_dict['website']
  16. print('\nMy name: {}, personal site: {}\n'.format(name, site))

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

flask_json_file_03

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

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

flask_json_file_04

参考资料

转载请注明作者和出处,并添加本页链接。
原文链接: blog.xugaoxiang.com/142