python flask 响应的data, code, headers三种设置方式

  过多次的测试,发现接口函数的返回值一定会经过 flask_restful.Api.make_response 处理后, 通过 flask.Flask 对象返回给调用方。

分享三种响应体 响应头 状态码的设置方式:

  • 无论那种方式,参数顺序传递顺序依次为:响应体, 状态码, 响应头。
  1. 接口函数直接返回。文件上传接口的示例:
    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
    
  2. 使用 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)
    
  3. 使用 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)
    
    *. 将响应体, 状态码, 响应头放在一个元组中传参:
    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))
    
    *. 将响应体转换为ResponseBase对象后传参:
    from flask import make_response
    from flask import jsonify
    res = jsonify(msg='success', data={'data': 's'})
    make_response((res,415,None))
    
上一篇:SpaCy 和 Flask API 构建 Python 命名实体自动提取器


下一篇:【Flask】CORS同源问题解决