我们来看一个 flask 视图函数示例:
1 2 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 来向接口发起请求:
1 2 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形式向接口发送图片文件,接口接收文件并展示。
1 2 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()
|
1 2 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以二进制的形式向接口发送图片文件,接口接收文件并保存。
1 2 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()
|
1 2 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)
|