2017-06-14 147 views
0

我有以下flak_restful文件將csv文件返回給用戶,但出現以下錯誤。flask_restful無法返回文件

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 

回答

1

從return語句的第二部分中刪除, 200應該工作。

第二個參數將調用flask_restful的助手來創建響應,但在這種情況下,您已經提前創建了一個響應對象,其中包含make_response。沒關係,你需要創建自己的對象來返回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