【问题标题】:Flask REST API returned json data with extra empty curly brackets at the endFlask REST API 返回 json 数据,末尾有额外的空花括号
【发布时间】:2021-06-03 03:06:34
【问题描述】:

所以我正在使这个 API 与我的 Vue 前端一起工作,起初一切正常,但我不知道前端突然发生的事情无法正确显示检索到的数据,我正在使用数据选择它只显示空选项。当我在邮递员上检查 API 返回的数据时,它显示如下:

[
  [
    //my data here
  ],
  {}
]

如您所见,儿子的末尾有一个空的大括号,我怀疑这就是前端无法正确显示数据的原因,但如果不是这样,那我不知道什么是...请帮帮我...

这是我的前端代码:

<select v-model="cpuSelect" name="cpu" id="cpu" class="form-control" tabindex="12">
      <option v-for="cpu in cpus" :key="cpu.id">{{ cpu.Name }}</option>
</select>

以及 vue 中的脚本:

import axios from 'axios';
export default {
  data() {
    return {
      cpus: [],
      cpuSelect: ''
    }
  },
  async mounted() {
    this.load()
  },
  methods: {
      async load(){
        const response = await axios.get(`http://127.0.0.1:5000/api/v1/parts/cpu`)
        this.cpus = response.data
      }
  }
}

对于烧瓶模型:

class cpu(db.Model):
id = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String)
Socket = db.Column(db.String) 

@staticmethod
def get_all_cpu():
    return cpu.query.all()

@staticmethod
def get_cpu(id):
    return cpu.query.get(id)

def __repr(self):
    return '<id {}>'.format(self.id)

class cpuSchema(Schema):
    id = fields.Int(dump_only=True)
    Name = fields.Str(dump_only=True)
    Socket = fields.Str(dump_only=True)

还有烧瓶视图:

@parts_api.route('/cpu', methods=['GET'])
def get_all_cpu():
  cpu_query_all = cpu.get_all_cpu()
  data = cpu_schema.dump(cpu_query_all, many=True)
  return custom_response(data, 200)

def custom_response(res, status_code):
  """
  Custom Response Function
  """
  return Response(
    mimetype="application/json",
    response=json.dumps(res),
    status=status_code
  )

请帮帮我...

【问题讨论】:

  • custom_response里面的逻辑是什么?
  • @EpicChen 哦,对了,我忘记添加了
  • @EpicChen 你现在可以在我的烧瓶视图 sn-ps 上看到 custom_response
  • 仍然缺少 cpu_schema.dump 中的逻辑。你会格式化烧瓶模型的代码吗?
  • @EpicChen 是从我的postgresql数据库中查询数据并将其转储为json,我不明白你的意思是格式化烧瓶模式的代码,但是如果你想看看我的烧瓶模型我已经将它包含在我的问题中

标签: rest vue.js flask vue-component


【解决方案1】:

我假设 cpu_schema.dump() 结果的格式是MarshalResult(data=[], errors={}),那就是

    @parts_api.route('/cpu', methods=['GET'])
    def get_all_cpu():
      cpu_query_all = cpu.get_all_cpu()
      data = cpu_schema.dump(cpu_query_all, many=True).data
      return custom_response(data, 200)

其实空大括号就是MarshalResult的错误信息。

参考:Flask's jsonify function inconsistent with flask-marshmallow

【讨论】:

  • 哦,我现在明白了,这就解释了一切!但是我没有得到的是,当我的朋友在计算上运行代码时,在语法末尾使用 .data 他得到了一个错误,谢谢 man
  • 告诉他检查cpu_schema.dump的结果。
【解决方案2】:

尝试从“dump”调用中删除“many”

def get_all_cpu():
cpu_query_all = cpu.get_all_cpu()
data = cpu_schema.dump(cpu_query_all)
return custom_response(data, 200)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 2016-07-05
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    相关资源
    最近更新 更多