跳转到主要内容

通过MongoEngine支持MongoDB的Django

项目描述

OSS Lifecycle Gitter chat

这是一个不稳定的项目,如果您想使用它 - 修复您需要的部分

目前我们正在针对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

待办事项

连接

在您的 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 (177.6 kB 查看哈希值)

上传时间: 源代码

由以下支持