郑文峰的博客 郑文峰的博客
首页
  • python之路
  • go之路
  • 其他
  • redis
  • mysql
  • docker
  • k8s
读书破万卷
周刊
关于
  • 导航 (opens new window)
  • 代码片段 (opens new window)
  • 收藏
  • 友链
  • 外部页面

    • 开往 (opens new window)
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)

zhengwenfeng

穷则变,变则通,通则久
首页
  • python之路
  • go之路
  • 其他
  • redis
  • mysql
  • docker
  • k8s
读书破万卷
周刊
关于
  • 导航 (opens new window)
  • 代码片段 (opens new window)
  • 收藏
  • 友链
  • 外部页面

    • 开往 (opens new window)
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)
  • python

    • 基础

    • 第三方库

    • django

    • flask

      • Flask使用flask_socketio实现websocket
      • flask结合mongo
        • 简介
        • 相关链接
        • 使用
        • 解決问题
    • tornado

    • 其他

  • go

  • 其他

  • 编程
  • python
  • flask
zhengwenfeng
2022-08-10
目录

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

创建mongo引擎.

from flask_mongoengine import MongoEngine
mongodb = MongoEngine()
1
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

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


# 通过id获取数据.  
instance = Article.objects.get_or_404(id=id)
1
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
#python#flask
上次更新: 2023/01/15, 15:47:48
Flask使用flask_socketio实现websocket
tornado 文件上传

← Flask使用flask_socketio实现websocket tornado 文件上传→

最近更新
01
django rest_framework 分页
03-20
02
学习周刊-第03期-第09周
03-03
03
学习周刊-第02期-第08周
02-24
更多文章>
Theme by Vdoing | Copyright © 2022-2023 zhengwenfeng | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式