过多次的测试,发现接口函数的返回值一定会经过 flask_restful.Api.make_response
处理后, 通过 flask.Flask
对象返回给调用方。
分享三种响应体 响应头 状态码的设置方式:
- 无论那种方式,参数顺序传递顺序依次为:响应体, 状态码, 响应头。
- 接口函数直接返回。文件上传接口的示例:
import os from flask import request from flask_restful import Resource class UploadApi(Resource): def post(self): # 文件上传 try: upload_file = request.files['file'] task = request.form.get('identifier') # 获取文件唯一标识符 chunk = request.form.get('chunkNumber') # 获取该分片在所有分片中的序号 file_size = request.form.get('currentChunkSize') # 获取该分片的大小 file_path, proj_name = request.form.get('relativePath').split('/') # 版本文件所属项目、存放目录 filename = '%s%s' % (task, chunk) # 构成该分片唯一标识符 # 分目录存放 localdir = "/UPGRADE_PACKAGE_ROOT" if not os.path.isdir(localdir): os.makedirs(localdir) file_path = '%s/%s' % (localdir, filename) upload_file.save(file_path) except Exception as e: return str(e), 415 return {'msg':'success', 'data':{'data': '%s' % (file_path)}}, 200, None
- 使用
flask.make_response
方法,该方法内部会调用flask_restful.Api.make_response
。示例:from flask_restful import output_json # return {'msg':'success', 'data':{'data': '%s' % (file_path)}}, 200, None return output_json(data={'msg': 'success', 'data': {'data': 's' }}, status=200, headers=None)
- 使用
flask_restful.output_json
方法拼接。output_json
内部会使用flask.make_response
方法:
*. 按顺序传参
*. 将响应体, 状态码, 响应头放在一个元组中传参:from flask import make_response # return {'msg':'success', 'data':{'data': '%s' % (file_path)}}, 200, None return make_response({'msg': 'success', 'data': {'data': 's'}}, 200)
*. 将响应体转换为ResponseBase对象后传参:from flask import make_response # return {'msg':'success', 'data':{'data': '%s' % (file_path)}}, 200, None return make_response(({'msg': 'success', 'data': {'data': 's'}}, 200, None))
from flask import make_response from flask import jsonify res = jsonify(msg='success', data={'data': 's'}) make_response((res,415,None))