众所周知,Django内置支持关系型数据库很好,而对于NoSQL中很流行的Mongo缺省是不支持的,网上关于这部分的实践文章,大多以django-mongoengine这个第三方模块为例。但我通过这些文章来读取mongodb时,均不能实现,经查,是因为这些文章大部分是django1.0时代的产物。
查阅官网http://mongoengine.org/来到官方文档:
http://docs.mongoengine.org/django.html
找到Django支持部分,看到如下的提示:
Django support has been split from the main MongoEngine repository. The legacy Django extension may be found bundled with the 0.9 release of MongoEngine.
大意就是MongoEngine对Django的支持已经单独剥离,于是又找到了Git
https://github.com/xuys50/django-mongoengine
这就是支持Django2.0和3.0的MongoEngine了,有详细的说明,也附了例子在example app中。通过以下命令可以跑在测试环境中(需要提前设置好mongodb)
conda activate mongo_test #这里我用的是conda,读者可启用自己的虚拟环境
django-admin version #我用的是django3.17版本
3.1.7
pip install .
pip install -r example/tumblelog/requirements.txt
cd django-mongoengine/example/tumblelog
python manage.py runserver 0:8888
#这里要注意自己的server上防火墙启用了8888端口,并在Django中的settings.py中设置了允许所有IP可访问
[root@VM-0-17-centos tumblelog]# more tumblelog/settings.py | grep ALLOW
ALLOWED_HOSTS = '*'
启动django结果如下:
(mongo_test) [root@VM-0-17-centos tumblelog]# python manage.py runserver 0:8888
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
March 01, 2021 - 10:42:02
Django version 3.1.7, using settings 'tumblelog.settings'
Starting development server at http://0:8888/
Quit the server with CONTROL-C.
查看前端页面:
点击右上角create--POST可发表文章:
检查mongodb中的collections如下:
> use django_mongoengine
switched to db django_mongoengine
> show tables
django_session
post
user
到此验证了django3.1下的mongodb实现。
接下来我将在自己的项目中使用它,并将过程记录在这里!