Python 和 Flask 如何返回列表? [复制]

Posted

技术标签:

【中文标题】Python 和 Flask 如何返回列表? [复制]【英文标题】:How return list on Python and Flask? [duplicate] 【发布时间】:2019-05-28 22:45:38 【问题描述】:

我正在尝试在烧瓶中返回此列表。 Teacher 是一个类并返回对象。

@app.route('/v1/teachers', methods=['GET'])
def getTeachers():
  teachers = []
  for teacher in Teacher.objects:
    teachers.append(teacher)
  return teachers

此代码返回的典型错误是 TypeError: 'list' object is not callable The view function did not return a valid response.

我快疯了,我不知道发生了什么。有人知道吗?

谢谢!!

编辑:

我已经解决了。问题不在于如何返回列表,问题在于对象的 JSON 序列化。

@app.route('/v1/teachers', methods=['GET'])
def getTeachers():
  teachers = []
  for teacher in Teacher.objects:
     teacherJson = teacher.to_json()
     teacherData = json.loads(teacherJson)
     teachers.append(teacherData)
  return jsonify('teachers': teachers)

感谢您的帮助。

【问题讨论】:

您是否尝试过检查 Teacher.objects 中的值?此外,您可能需要以 json 格式返回响应。因此,您需要以 json 格式传递此列表。 试试return json.dumps(teachers) 这不起作用,它给了我这个错误:TypeError: <Teacher: Teacher object> is not JSON serializable 【参考方案1】:

您不能直接从烧瓶视图返回列表。请尝试 jsonify

from flask import jsonify
@app.route('/v1/teachers', methods=['GET'])
def getTeachers():
   teachers = []
   for teacher in Teacher.objects:
      teachers.append(teacher)
   return jsonify(teachers)

【讨论】:

不起作用类型错误:List 类型的对象不是 JSON 可序列化的 这至少适用于 python 2。 @ajbraus 看看这里***.com/questions/16586180/…【参考方案2】:

你正在返回一个列表,Flask 期望返回一个响应。

from flask import jsonify

@app.route('/v1/teachers', methods=['GET'])
def getTeachers():
  teachers = []
  for teacher in Teacher.objects:
    teachers.append(teacher)
  return jsonify(teachers: [teachers])

【讨论】:

这不起作用,它给了我这个错误:TypeError: <Teacher: Teacher object> is not JSON serializable 这不起作用。 您可以在他的回答中看到 OP 的编辑。 teacher 对象如果不能自动转换,则必须在此处转换为 JSON。

以上是关于Python 和 Flask 如何返回列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

python: flask返回的html标签被当成字符串

Python/FLASK - html 表单返回字符串。如何检查它是不是包含数字?

python flask 如何读取数据库数据并返回到html

如何在 Flask 中“jsonify”一个列表? [复制]

Python | 使用Flask搭建一个API服务器

使用 Python 和 Flask 返回 API 错误消息