【问题标题】:How return list on Python and Flask? [duplicate]Python 和 Flask 如何返回列表? [复制]
【发布时间】: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

标签: python list api flask


【解决方案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)

【讨论】:

【解决方案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。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 2021-01-14
相关资源
最近更新 更多