flask结合mongo

2023-03-06 19:18:15 浏览数 (1)

# 简介

本文是flask中对mongo的操作. 使用Flask-MongoEngine集成了mongo的操作,使用的是类似于django中的orm操作。

# 相关链接

Flask-MongoEngine文档 (opens new window)

MongoEngine文档 (opens new window)

# 使用

mongo的配置. flask将这个配置加载进来即可.

代码语言:javascript复制
MONGODB_SETTINGS = {
    "db": "lifeAssistant",
    "host": "192.168.0.206",
    "port": 27017
}

创建mongo引擎.

代码语言:javascript复制
from flask_mongoengine import MongoEngine
mongodb = MongoEngine()

创建Document,类似于django的model.

代码语言:javascript复制
from lifeAssistant.extension import mongodb

class Article(mongodb.Document):
    category = mongodb.StringField()
    category2 = mongodb.StringField()
    title = mongodb.StringField()
    content = mongodb.StringField()
    publisher = mongodb.StringField()
    publisher_time = mongodb.StringField()
    create_time = mongodb.StringField()

使用Document进行操作. 其他操作请看官方文档

代码语言:javascript复制
# 通过id获取数据.  
instance = Article.objects.get_or_404(id=id)

# 解決问题

mongo数据转json

问题: mongo转json时,会输出ObjectId这对象,而不是直接的id值,这个时候需要转换.

代码语言:javascript复制
# 这个是将mongo Document对象转换成json的编码器
class MongoEncoder(JSONEncoder):
    def default(self, o):

        # 转换日期
        if isinstance(o, (datetime, date)):
            pass

        # 转换Document
        if isinstance(o, BaseDocument):
            return o.to_mongo()

        # 转换id
        if isinstance(o, ObjectId):
            return str(o)

        return JSONEncoder.default(self, o)



# 在蓝图上添加mongo解码器.  jsonify会自动将Document对象转成json
bp = Blueprint("article", __name__, url_prefix="/article")
bp.json_encoder = MongoEncoder


@bp.route("/<id>/", methods=("GET",))
def article(id: str):
    instance = Article.objects.get_or_404(id=id)

    return jsonify({
        "code": 0,
        "msg": "success",
        "data": instance
    })

0 人点赞