如何返回包含多个字典和文件的 Flask 响应

alp*_*ric 5 python request flask python-requests

随着server.py跑步:

from flask import Flask, request, Response, json

app = Flask(__name__)

@app.route('/test', methods=['GET','POST'])
def route():  
    open_read =  open(r'C:\log.log').read()
    dict_data = {'str': str(), 'list': list(), 'dict': dict()}
    return Response(json.dumps(dict_data), mimetype='text/plain')

if __name__ == '__main__':
    app.run('0.0.0.0', 5000)
Run Code Online (Sandbox Code Playgroud)

我想发送客户端请求并接收回open_read变量dict_data数据。

有没有办法使用flask.Response对象将这两个变量返回给客户端?

客户:

import json, requests  
response = requests.post('http://127.0.0.1:5000/test')
print '...response: %s' % response.json(), type(response.json())
Run Code Online (Sandbox Code Playgroud)

完整的工作解决方案如下:

服务器:

from flask import Flask, request, Response, json
import base64

app = Flask(__name__)

@app.route('/test', methods=['GET','POST'])
def route():  
    open_read =  open('my_file.zip').read()
    encoded = base64.b64encode(open_read)
    dict_data = {'str': str(), 'list': list(), 'dict': dict(), 'encoded': encoded}
    return Response(json.dumps(dict_data), mimetype='text/plain')

if __name__ == '__main__':
    app.run('0.0.0.0', 5000)
Run Code Online (Sandbox Code Playgroud)

客户:

response = requests.post('http://127.0.0.1:5000/test')
response_json = response.json()
encoded = response_json['encoded']

decoded = base64.b64decode(encoded)

dst_filepath = "my_zip.zip"
with open(dst_filepath, 'w') as _file:
    _file.write(decoded)
Run Code Online (Sandbox Code Playgroud)