You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何直接在Flask中使用jsonify处理FireO Models这类自定义类?

解决FireO模型与Flask jsonify直接兼容的问题

我当前使用Flask 2.3.2和FireO ORM 2.1.0,FireO模型默认无法直接被Flask的jsonify序列化,必须手动调用to_dict()转换为字典才能传入。现在需要实现直接将FireO模型实例或QueryIterator查询结果传入jsonify的功能。

方案一:自定义Flask JSON编码器

通过扩展Flask的JSON编码器,让它自动识别并处理FireO对象:

from flask import Flask, jsonify
from flask.json import JSONEncoder
from fireo.models import Model
from fireo.queries.query_iterator import QueryIterator

class FireOJSONEncoder(JSONEncoder):
    def default(self, obj):
        # 处理单个FireO模型实例
        if isinstance(obj, Model):
            return obj.to_dict()
        # 处理FireO查询迭代器(批量查询结果)
        elif isinstance(obj, QueryIterator):
            return [item.to_dict() for item in obj]
        # 其他类型交给父类默认逻辑处理
        return super().default(obj)

# 注册自定义编码器到Flask应用
app = Flask(__name__)
app.json_encoder = FireOJSONEncoder

# 使用示例
@app.route('/users')
def get_users():
    users = User.collection.fetch()  # 返回QueryIterator
    return jsonify(users), 200

@app.route('/user/<user_id>')
def get_user(user_id):
    user = User.collection.get(user_id)  # 返回单个Model实例
    return jsonify(user), 200

方案二:扩展FireO基础模型

给FireO模型添加__json__方法,Flask的JSON编码器会自动调用该方法完成序列化:

from fireo.models import Model as FireOModel

# 自定义基础模型,添加序列化方法
class Model(FireOModel):
    def __json__(self):
        return self.to_dict()

# 业务模型继承自定义基础模型
class User(Model):
    name = TextField()
    email = TextField()

注意:此方案仅处理单个模型实例,批量查询的QueryIterator仍需配合方案一的编码器处理,因此更推荐方案一,一次配置即可兼容所有场景。

内容的提问来源于stack exchange,提问作者Caponte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 01:57:44