flask_restful 无法 return 文件

flask_restful cannot return file

我有以下 flak_restful 文件来 return 向用户返回一个 csv 文件,但我收到以下错误。

  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py", line 180, in default
    o.__class__.__name__)
TypeError: Object of type 'Response' is not JSON serializable



import flask
from flask import request
from flask_restful import Resource

class MyAPIRes(Resource):

    @classmethod
    def get(cls):
        csv = '1,2,3\n4,5,6\n'
        response = flask.make_response(csv)
        response.headers['content-type'] = 'application/octet-stream'
        return response, 200

从 return 语句的第二部分删除 , 200 应该有效。

第二个参数将从 flask_restful 调用帮助程序来创建响应,但在这种情况下,您已经使用 make_response 创建了响应对象。没关系,您需要为 return 创建自己的对象,而不是 JSON。但是助手做的一件事就是为你序列化你的数据(把它变成JSON),而Response类型是不可序列化的。

查看跟踪,您可以在此处的错误消息中看到它的发生:

File ".../flask_restful/__init__.py", line 510, in make_response
  resp = self.representations[mediatype](data, *args, **kwargs)
File ".../flask_restful/representations/json.py", line 20, in output_json
  dumped = dumps(data, **settings) + "\n"

有关响应类型的文档可以在 flask_restful response formats 部分找到。