当前位置 博文首页 > 使用Djongo模块在Django中使用MongoDB数据库

    使用Djongo模块在Django中使用MongoDB数据库

    作者:州的先生 时间:2021-08-01 18:20

    目录
    • 一、安装与配置
    • 二、定义模型
    • 三、生成模型
    • 四、访问Django Admin
    • 五、操作数据
    • 六、最后

    一、安装与配置

    Djongo的项目官方地址为:https://nesdis.github.io/djongo/,我们可以通过pip命令直接安装djongo:

    pip install djongo

    在安装完成之后,我们就可以直接在Django中配置MongoDB数据库的信息了。

    在正常情况下,我们的Django项目中数据库在settings.py文件中进行配置,其一般配置如下所示:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }

    而我们使用Djongo的话,变化也不大,如下所示:

    DATABASES = {
        'default': {
            'ENGINE': 'djongo',
            'NAME': 'MongoDB数据库的名称',
        }
    }

    可以发现,这与Django原始的数据库配置方法是一模一样的,所不同的是,数据库的引擎使用了djongo而非Django官方提供的数据库封装引擎。

    我们用一个新的Django项目来演示一下djongo的使用。

    首先创建Django项目和应用:

    然后修改项目的settings.py文件,填写MongoDB数据库的配置信息,Djongo提供了如下参数供我们设置数据库的信息:

    DATABASES = {
       'default': {
          'ENGINE': 'djongo',
          'ENFORCE_SCHEMA': True,
          'NAME': 'your-db-name',
          'HOST': 'host-name or ip address',
          'PORT': port_number,
          'USER': 'db-username',
          'PASSWORD': 'password',
          'AUTH_SOURCE': 'db-name',
          'AUTH_MECHANISM': 'SCRAM-SHA-1',
          'REPLICASET': 'replicaset',
          'SSL': 'ssl',
          'SSL_CERTFILE': 'ssl_certfile',
          'SSL_CA_CERTS': 'ssl_ca_certs',
          'READ_PREFERENCE': 'read_preference'
       }
    }

    我们的数据库是本地的数据库,所以只需要设置一部分信息即可,其如下所示:

    DATABASES = {
       'default': {
          'ENGINE': 'djongo',
          'ENFORCE_SCHEMA': True,
          'NAME': 'djongo_example',
          'HOST': '127.0.0.1',
          'PORT': 27017,
       }
    }

    这样,MongoDB在Django中的 配置就完成了,我们下面可以定义一些模型。

    二、定义模型

    Djongo的一大特点是可以无缝地衔接Django的ORM语法,包括模型定义的语法和模型操作的语法。现在,我们就为Django项目定义一些模型。

    在默认情况下,Django应用的模型在其目录下的models.py文件中定义。models.py文件初始化状态下只有如下一行代码:

    from django.db import models

    这是Django数据库封装的模型类,我们需要将其修改为Djongo提供的模型类,如下所示:

    from djongo import models

    然后,就可以按照Django的方式来定义模型了。在这里,我们定义了一个News()模型,用于存储新闻:

    class News(models.Model):
        title = models.CharField(verbose_name="标题",max_length=50)
        author = models.CharField(verbose_name="作者",max_length=10)
        desc = models.CharField(verbose_name="简介",max_length=100)
        content = models.TextField(verbose_name="正文")
        create_time = models.DateTimeField(auto_now_add=True)
        update_time = models.DateTimeField(auto_now=True,auto_now_add=True)
    
        def __str__(self):
            return self.title
    
        class Meta:
            verbose_name = '新闻'
            verbose_name_plural = verbose_name

    三、生成模型

    定义好模型之后,继续按照Django模型的使用方式,生成数据库迁移,并执行迁移:

    python manage.py makemigrations app&
    python manage.py migrate

    命令的执行信息如下所示:

    和使用SQL数据库一样,Django为新项目创建了我们定义的模型还有一些认证管理相关的表,这是否是真的呢,我们去MongoDB数据库里面查看一下:

    MongoDB数据库里面果然生成了一系列的数据表。

    四、访问Django Admin

    经过上面的演示,我们可以发现借助于Djongo模块,我们可以无痛地以Django ORM的方式来使用MongoDB数据库。那么作为Django重量级的admin后台功能,是否能够支持呢?我们继续下面的演示。

    首先,继续在命令行中创建一个超级用户:

    python manage.py createsuperuser

    其过程与使用其他SQL数据库无异:

    接着,我们将刚刚创建的News()模型添加到admin中,在admin.py中进行设置:

    from app.models import News
    admin.site.register(News)

    随后,运行测试服务器:

    五、操作数据

    除此之外,我们最关心的还是对数据操纵是否方便。我们先在后台界面尝试一下新增数据:

    显示新增成功了,我们去MongoDB里面看看是否存在:

    六、最后

    经过上面初步的演示在Django中借助djongo模块来使用MongoDB,可以发现其还是很方便的,优点在于其改动微乎其微,兼容性特别强。推荐大家在测试环境下充分地进行测试使用,如果没有问题,那么可以谨慎在生产环境中进行部署。更多的使用方法和问题,大家可以访问djongo项目官网:https://nesdis.github.io/djongo/ 和它的GitHub项目地址:https://github.com/nesdis/djongo/

    jsjbwy
    下一篇:没有了