flask结合mongo
# 简介
本文是flask中对mongo的操作. 使用Flask-MongoEngine
集成了mongo的操作,使用的是类似于django中的orm操作。
# 相关链接
Flask-MongoEngine文档 (opens new window)
MongoEngine文档 (opens new window)
# 使用
mongo的配置. flask将这个配置加载进来即可.
MONGODB_SETTINGS = {
"db": "lifeAssistant",
"host": "192.168.0.206",
"port": 27017
}
1
2
3
4
5
2
3
4
5
创建mongo引擎.
from flask_mongoengine import MongoEngine
mongodb = MongoEngine()
1
2
2
创建Document,类似于django的model.
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()
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
使用Document进行操作. 其他操作请看官方文档
# 通过id获取数据.
instance = Article.objects.get_or_404(id=id)
1
2
3
2
3
# 解決问题
mongo数据转json
问题: mongo转json时,会输出ObjectId这对象,而不是直接的id值,这个时候需要转换.
# 这个是将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
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
上次更新: 2023/05/01, 18:02:43