通过MongoEngine支持MongoDB的Django
项目描述
这是一个不稳定的项目,如果您想使用它 - 修复您需要的部分
目前我们正在针对Django 4.2进行测试;
警告:此项目状态不佳,可能会在Django更新时崩溃。最好使用原始的MongoEngine。
工作状态 / Django 3.2-4.2
[ok] sessions
[ok] models/fields, fields需要测试
[ok] views
[ok] auth
[?] admin - 部分工作,某些功能损坏
当前状态
许多项目部分被重写/删除;不是复制Django代码,而是尝试子类化/重用/甚至猴子补丁;上面列出的一切都在正常工作;管理员 - 只包含基本功能,如changelist/edit,没有与每种表单类型进行测试;需要更多的工作。
一些代码只是占位符以使事情工作;django/forms/document_options.py - 为了使东西与Django一起工作,绝对需要这种肮脏的补丁。它替换了模型/类的mongo _meta,并提供类似Django的界面。它通过某种元类魔法在类创建后被替换。
字段说明
mongo默认字段Field(required=False),更改为Django风格的默认值 -> Field(blank=False),并在Field.__init__中设置required = not blank
待办事项
同步从mongoengine删除的某些文件/文档:https://github.com/seglberg/mongoengine/commit/a34f4c1beb93f430c37da20c8fd96ce02a0f20c1?diff=unified
查看django-mongotools: https://github.com/wpjunior/django-mongotools
连接
在您的 settings.py 文件中,添加以下行
MONGODB_DATABASES = { "default": { "name": database_name, "host": database_host, "password": database_password, "username": database_user, "tz_aware": True, # if you using timezones in django (USE_TZ = True) }, } INSTALLED_APPS += ["django_mongoengine"]
文档
从 django_mongoengine.Document 继承您的文档,并使用 django_mongoengine.fields 定义字段。
from django_mongoengine import Document, EmbeddedDocument, fields class Comment(EmbeddedDocument): created_at = fields.DateTimeField( default=datetime.datetime.now, editable=False, ) author = fields.StringField(verbose_name="Name", max_length=255) email = fields.EmailField(verbose_name="Email") body = fields.StringField(verbose_name="Comment") class Post(Document): created_at = fields.DateTimeField( default=datetime.datetime.now, editable=False, ) title = fields.StringField(max_length=255) slug = fields.StringField(max_length=255, primary_key=True) comments = fields.ListField( fields.EmbeddedDocumentField('Comment'), blank=True, )
会话
Django允许使用不同的后端存储来存储其会话。MongoEngine为Django提供了一个基于MongoDB的会话后端,这使得您可以使用MongoDB在Django应用程序中使用会话。要启用MongoEngine会话后端,请确保您的settings模块在 MIDDLEWARE_CLASSES 字段中包含 'django.contrib.sessions.middleware.SessionMiddleware',并在 INSTALLED_APPS 中包含 'django.contrib.sessions'。从那里,您只需在settings模块中添加以下行
SESSION_ENGINE = 'django_mongoengine.sessions' SESSION_SERIALIZER = 'django_mongoengine.sessions.BSONSerializer'
Django提供了会话cookie,在 `SESSION_COOKIE_AGE` 秒后过期,但不会在会话后端删除cookie,因此 'mongoengine.django.sessions' 支持 mongodb TTL。
如何运行示例应用程序
poetry install
poetry run pip install -r example/tumblelog/requirements.txt
poetry run python example/tumblelog/manage.py runserver
如何运行测试
poetry install
poetry run python -m pytest
项目详情
django-mongoengine-0.5.6.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0474b32f818b442e3646ae1853a703fb1be9170dbf394ee7dfdd97e3a7d7b726 |
|
MD5 | 408c462402516e34a58a8d8bab684dae |
|
BLAKE2b-256 | 9c348f58c81b0676e57cb6cb2e83298f84a89b06d123d31712d85baec5aad91d |