视图函数未返回有效的响应.返回类型必须是字符串、dict、元组、响应实例或可调用的WSGI,但它是一个列表



TypeError:视图函数未返回有效响应。返回类型必须是字符串、dict、元组、响应实例或可调用的WSGI,但它是一个列表。

from flask import Flask, jsonify, request
from pytube import YouTube
app = Flask(__name__)
@app.route('/youtube', methods=['POST'])
def hello_world():
url = request.form['d_url']
yt_video = YouTube(url)
videos = yt_video.streams
res_list = list(enumerate(videos))
return res_list
if __name__ == "__main__":
app.run(debug =True)

不能直接从flask.view返回列表,必须将其转换为json对象。

显然,直接使用Flask中的jsonify是不行的,因为它无法序列化res_list中的Stream对象。当执行jsonify(res_list)时,我得到以下错误:

TypeError: Object of type Stream is not JSON serializable

使用jsonpickle完成了任务。以下代码正在工作:

from flask import Flask, jsonify, request
from pytube import YouTube
import jsonpickle
app = Flask(__name__)

@app.route('/youtube', methods=['POST'])
def hello_world():
url = request.form['d_url'] #'http://youtube.com/watch?v=9bZkp7q19f0'
yt_video = YouTube(url)
videos = yt_video.streams
res_list = list(enumerate(videos))
return jsonpickle.encode(res_list)
if __name__ == "__main__":
app.run(debug =True)

您可以尝试json.dumps函数

import json
from flask import Flask, jsonify, request
from pytube import YouTube
app = Flask(__name__)
@app.route('/youtube', methods=['POST'])
def hello_world():
url = request.form['d_url']
yt_video = YouTube(url)
videos = yt_video.streams
res_list = list(enumerate(videos))
json.dumps(res_list)
if __name__ == "__main__":
app.run(debug =True)

相关内容

  • 没有找到相关文章