Django 1.9适配的django-nonrel版本无法找到,新手求MongoDB配置方法
作为长期和Django、MongoDB打交道的开发者,我很理解你现在的困惑——django-nonrel确实在Django 1.5之后就基本停止维护了,官方没有推出适配1.9的正式版本,所谓的"master"分支也只是旧代码的留存,没有针对Django 1.9做兼容更新,直接用大概率会踩一堆坑。不过别担心,还有几个更靠谱的方案可以解决你的问题:
方案一:使用MongoEngine(推荐)
MongoEngine是一款成熟的MongoDB ODM(对象文档映射)工具,专门为Python设计,和Django的兼容性非常好,即使是1.9版本也能稳定运行。它不需要依赖django-nonrel,完全独立于Django原生ORM工作,步骤如下:
安装MongoEngine
在终端执行:pip install mongoengine配置数据库连接
在Django项目的settings.py中添加MongoDB的连接配置(可以不用修改原生的DATABASES配置,除非你同时需要使用其他关系型数据库):from mongoengine import connect # 连接MongoDB connect( db="your_database_name", # 你的数据库名 host="localhost", # MongoDB服务地址 port=27017, # 默认端口 # 如果数据库有认证,添加以下内容 # username="your_username", # password="your_password" )编写MongoDB模型
不再使用Django原生的models.Model,而是继承MongoEngine的Document类:from mongoengine import Document, StringField, IntField, DateTimeField class BlogPost(Document): title = StringField(required=True, max_length=200) content = StringField() author = StringField() publish_date = DateTimeField() # 可以定义索引 meta = { 'indexes': ['title', 'publish_date'] }在视图中使用模型
用法和Django ORM非常相似,学习成本很低:from django.shortcuts import render from .models import BlogPost def post_list(request): # 查询所有文章 posts = BlogPost.objects.all().order_by('-publish_date') return render(request, 'posts/list.html', {'posts': posts})
方案二:尝试手动安装django-nonrel master分支(不推荐)
如果你一定要尝试使用django-nonrel,可以通过git克隆其master分支源码进行本地安装,但要做好踩坑的准备——因为这个分支没有针对Django 1.9做适配,可能会出现大量兼容性错误(比如中间件结构、模型语法的变化),仅适合测试使用:
克隆源码并安装
在终端执行以下命令:git clone https://github.com/django-nonrel/django-nonrel.git cd django-nonrel git checkout master pip install -e .后续配置
安装完成后,还需要搭配django-mongodb-engine和djangotoolbox使用,但这两个项目同样停止维护,大概率也会和Django 1.9冲突,所以不推荐在生产环境使用。
总结
如果你是新手,强烈建议选择MongoEngine方案,它的文档完善、社区活跃,能让你快速上手Django+MongoDB的开发,避免因为django-nonrel的兼容性问题浪费时间。
内容的提问来源于stack exchange,提问作者khadija.EL

