我们来看一个 flask 视图函数示例:
| 12
 3
 4
 5
 6
 7
 8
 
 | from flask import Flask, request
 app = Flask(__name__)
 
 @app.route('/test', methods=['post', 'get'])
 def test():
 data = request.get_json()['data']
 return data
 
 | 
注意:flask视图函数的返回值类型只能为:string, dict, tuple, Response instance, or WSGI callable。
我们用 requests 来向接口发起请求:
| 12
 3
 4
 
 | import requests
 r = requests.post('127.0.0.1:8802/test', data={'data':'hello world'})
 print(r.text)
 
 | 
接下来,我们看看flask接口接收数据都有哪些方法。
| Tables | Are | 结果 | 
| request.form | 获取参数字典 |  | 
| request.form.get(键) | 获取字典中键的值 |  | 
| request.args.get(键) | 从 url 中获取参数 | request.args 是 ImmutableMultiDict 类型,它不能被改变。如果要改变其中的值,可以先将他转为 dict 类型:request.args.to_dict() | 
| request.args.getlist(键) | 获取字典中键的值 |  | 
| request.files | 接收文件字典 |  | 
| request.files.get(键) | 获取文件字典中的内容 |  | 
| 文件对象=request.files.get(键)  文件对象.save(保存路径) | 保存文件到本地,方式一 |  | 
| with open(路径,’wb’) as f:内容 = 文件对象.read()f.write(内容) | 保存文件到地址,方式二 |  | 
| 文件对象.name  文件对象.content_length | 文件的名字与大小 |  | 
| flask.request.method | 请求方式 | GET/POST | 
| flask.get_data() | 获取post参数 | 注:如果是form表单提交的POST数据请使用request.form | 
| args = request.get_json() | 获取postjson参数 | get_json()  会自动将json数据转换为字符串,还有POST请求需要设置请求头发送参数为application/json格式,才可以接收到。如果没有设置成json格式发送,请使用get_data接收参数 | 
实例1
通过requests以numpy的ndarry形式向接口发送图片文件,接口接收文件并展示。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 | 
 from flask import Flask, request, jsonify
 from gevent import pywsgi
 import cv2
 import numpy as np
 import json
 
 app = Flask(__name__)
 
 @app.route('/file', methods=['get', 'post'])
 def loadFile():
 data = request.get_json()['data']
 picture = json.loads(data)['picture']
 file = np.array(picture, dtype=np.uint8)
 cv2.imshow('xxx', file)
 cv2.waitKey(5000)
 cv2.destroyAllWindows()
 return jsonify({'data':'success'})
 
 if __name__ == '__main__':
 
 server = pywsgi.WSGIServer(('127.0.0.1', 8802), app)
 server.serve_forever()
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | 
 import requests
 import cv2
 import numpy as np
 import json
 
 img = cv2.imread('2.jpg')
 img_dict = {'picture':img.tolist()}
 img_json = json.dumps(img_dict)
 x = requests.post('http://127.0.0.1:8802/file', json={"data":img_json})
 print(x.json()['data'])
 
 | 
实例2
通过requests以二进制的形式向接口发送图片文件,接口接收文件并保存。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 
 | 
 from flask import Flask, request
 from gevent import pywsgi
 
 app = Flask(__name__)
 
 @app.route('/file', methods=['get', 'post'])
 def loadFile():
 data = request.files
 for name, file in data.items():
 file.save(name)
 
 if __name__ == '__main__':
 
 server = pywsgi.WSGIServer(('127.0.0.1', 8802), app)
 server.serve_forever()
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | 
 import requests
 
 
 requests.post('http://127.0.0.1:8802/file', file=open('x.jpg', 'rb'))
 
 
 
 dic = {}
 
 dirs = os.listdirs('data')
 for dir in dirs:
 
 path = 'data' + '/' + dir
 
 dic[dir] = open(path, 'rb')
 requests.post(url, file=dic)
 
 |