如何使用 PyMongo 将 Django 应用程序连接到 MongoDB

_ 作者选择了 Owasp 基金会作为 写给捐赠计划的一部分接受捐赠。

介绍

Django是一个免费的,开源,高级别的 Python网络框架,用于开发动态的网站和应用程序. 借助Django,您可以快速创建Python的Web应用程序,并依靠框架来最大限度地发挥重力。

构建应用程序需要选择数据库:SQLNoSQL. (关于数据库的更多情况,请见我们关于了解关系数据库关于NoSQL数据库管理系统和模型的比较的教程)。 像MongoDB这样的NoSQL数据库具有高效地存储大量数据的优势,这使得它们最理想地用于大数据应用,Things的互联网(IoT)等. NoSQL数据库被通常用于处理大量数据的公司.

最常用的 NoSQL 数据库是 MongoDB,是一个开源的文档数据库,用于大量数据存储,而不是使用表和行,如传统的关系数据库,MongoDB 使用集合和文档。文档由关键值对组成,这些文档是 MongoDB 中的数据的基本单位。

PyMongo是Python推荐的官方发行版,可将您的Django应用程序连接到MongoDB数据库。PyMongo是一个开源的Python发行版,包含与MongoDB互动的工具。它使您更容易执行CRUD操作(C reate,** R** ead,** U** pdate和** D** elete)与MongoDB数据库。

在本教程中,您将创建一个 Managed MongoDB 数据库集群,并使用 PyMongo 将其连接到您的 Django 应用程序,然后使用 PyMongo 在您的 MongoDB 实例中存储数据并获取数据。

前提条件

对于本教程,您将需要以下内容:

第1步:创建一个数字海洋管理的MongoDB集群

在此步骤中,您将使用您的 DigitalOcean 帐户来设置受管理的 MongoDB 数据库集群。

要开始,请登录您的 DigitalOcean 帐户。 如果您创建了新帐户,则为您创建了默认项目。您可以使用此项目或创建新的项目来遵循本指南。在您创建的 项目 中,点击绿色** 创建 ** 按钮,然后选择** 数据库** 选项。

DigitalOcean Managed MongoDB create cluster

选择 MongoDB 作为您的数据库引擎,然后选择一个** Datacenter** . 您可以更名数据库集群名称或使用默认名称。

DigitalOcean Managed MongoDB create cluster - options

在数据库提供时,您将被要求通过指定可信来源来保护您的数据库集群. 在 添加可信来源 字段中,您可以添加个人计算机的 IP 地址和您的 Django 应用程序的服务器。

MongoDB configuration - adding trusted sources

接下来,您将收到 连接详细信息 和您的数据库。 这些详细信息包括用户名密码主机和默认数据库。 复制这些详细信息并将其保存在安全的地方。 对于本教程,我们将使用** 连接字符串** ,这是一个包含您的数据库所有详细信息的字符串。 它看起来像这样:

1mongodb+srv://username:password@HOSTNAME/DATABASE_NAME?authSource=admin&tls=true&tlsCAFile=<PATH_TO_CA_FILE>

您可以访问 连接字符串 在** 概览字符串中,然后选择 ** 连接细节字符串. 选择** 连接参数字符串,然后选择 ** 连接字符串** 。

您还需要下载 CA 证书. 您需要该证书才能连接到数据库,因为需要 SSL 连接才能连接到数据库. 在 DigitalOcean 控制面板中的集群连接细节下方点击 下载 CA 证书 来下载集群的 CA 证书。

最后,重置管理员用户的密码,单击用户和数据库选项卡,然后单击用户旁边的三个点,然后使用重置密码选项。

DigitalOcean change admin password

此操作打开一个模式,您将重新输入管理员用户名并重置密码. 跟踪此密码,因为您将在以后的步骤中使用您的应用程序中的密码。

DigitalOcean change admin password

在此步骤中,您已经创建了 MongoDB 数据库,并拥有将其连接到 Django 应用程序所需的详细信息。

第2步:创建Django应用程序

在此步骤中,您将创建 Django 应用程序并运行它。

首先,为您的项目创建一个目录,并转换为它:

1mkdir ~/django-test
2cd ~/django-test

接下来,使用django-adminstartproject命令来创建您的 Django 项目,您可以使用任何项目名称;本教程使用DjangoMongo:

1django-admin startproject DjangoMongo

startproject将创建当前工作目录中的目录,其中包括:

  • 管理脚本,manage.py,可用于管理各种 Django 特定的任务。 * 包含实际项目代码的目录(与项目相同的名称)。

接下来,转到项目文件夹:

1cd DjangoMongo

要创建 Django 应用程序,请使用以下命令:

1python3 manage.py startapp djangoapp

最后,运行Django服务器来确认一切已正确设置:

1python3 manage.py runserver

您将看到以下结果:

 1[secondary_label Output]
 2Performing system checks...
 3
 4System check identified no issues (0 silenced).
 5
 6You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
 7Run 'python manage.py migrate' to apply them.
 8
 9March 06, 2022 - 20:20:09
10Django version 1.11.22, using settings 'DjangoMongo.settings'
11Starting development server at http://127.0.0.1:8000/
12Quit the server with CONTROL-C.

在您的浏览器中打开http://127.0.0.1:8000链接,您将看到默认的Django App页面。

Default Django index page

在此步骤中,您创建了一个 Django 应用程序,并在浏览器中成功运行它,接下来,您将设置 PyMongo 以将您的 MongoDB 集群连接到 Django 应用程序。

第3步:设置PyMongo

在此步骤中,您将安装 PyMongo 和 Dnspython。 PyMongo 是一个 Python 发行版,包含与 MongoDB 合作的工具。 PyMongo 允许您将 JSON 数据存储到您的数据库中,并与所有 MongoDB 命令一起工作。 Dnspython 是 Python 的 DNS 工具包。 需要使用 mongodb+srv:// URI 来连接到 DigitalOcean 管理的 MongoDB。

使用「pip3」命令安装 PyMongo:

1pip3 install pymongo

使用「pip3」安裝 Dnspython:

1pip3 install dnspython

要将 PyMongo 连接到您的 MongoDB 数据库,您首先需要编辑一些细节。在DjangoMongo项目文件夹中,打开settings.py文件以使用nano或您最喜欢的文本编辑器进行编辑:

1nano settings.py

评论文件中的整个数据库部分,如下所示:

1[label django-test/DjangoMongo/settings.py]
2# DATABASES = {
3#     'default': {
4#         'ENGINE': 'django.db.backends.sqlite3',
5#         'NAME': BASE_DIR / 'db.sqlite3',
6#     }
7# }

接下来,找到安装应用程序部分,并将您的Django应用程序添加到应用程序列表中:

 1[label django-test/DjangoMongo/settings.py]
 2INSTALLED_APPS = [
 3    'djangoapp',
 4    'django.contrib.admin',
 5    'django.contrib.auth',
 6    'django.contrib.contenttypes',
 7    'django.contrib.sessions',
 8    'django.contrib.messages',
 9    'django.contrib.staticfiles',
10]

此添加程序将您的应用程序注册到 Django 项目中,以便被 Django 项目认可,您可以在 Django 项目中拥有多个应用程序,每个应用程序都需要在这里注册。

保存并关闭文件,当你完成。

在此步骤中,您已在您的 Django 应用程序中安装了 PyMongo 和 Dnspython,这两者都需要将您的 Django 应用程序连接到您的 MongoDB 数据库。

第4步:配置 PyMongo

在此步骤中,您将通过编辑urls.pyviews.py文件中的设置来建立与您的 MongoDB 数据库的连接。

要开始,你会为你的Django应用程序注册新的URL。在你的项目文件夹下,打开urls.py进行编辑。 目前,有一个URL注册为/admin。 你会注册一个URL为root路径。 你还会添加一个导入到文件的顶部。 将突出的行添加到你的文件:

1[label DjangoMongo/urls.py]
2from django.contrib import admin
3from django.urls import path, include
4
5urlpatterns = [
6    path('',include('djangoapp.urls')),
7    path('admin/', admin.site.urls),
8]

保存并关闭文件,当你完成。

接下来,导航到djangoapp应用程序文件夹,创建一个新的urls.py文件,在新的urls.py文件中,添加下面的代码:

1[label djangoapp/urls.py]
2from django.urls import path
3
4from . import views
5
6urlpatterns = [path('',views.index,name='index'),]

此代码将您刚刚创建的 URL 连接到 views.py 文件,以便在打开 URL 时,它反映了 views.py 文件的内容。

保存并关闭文件,当你完成。

你要编辑的最后一个文件是views.py文件,它也位于djangoapp应用程序文件夹中。

1[label djangoapp/views.py]
2from django.http import HttpResponse
3
4# Create your views here.
5def index(request):
6    return HttpResponse("<h1>Hello and welcome to my first <u>Django App</u> project!</h1>")

第一行添加了导入,您可以留下与该文件一起生成的任何其他导入。

导入后的行将显示文本你好,欢迎来到我的Django应用程序项目而不是默认的Django页面,当应用程序在浏览器中打开。

接下来,添加以下行来导入 PyMongo:

1[label djangoapp/views.py]
2import pymongo

在相同的文件中,添加以下行以实例化 PyMongo 客户端. 用自己的连接字符串替换连接字符串,并更新下载的 CA 证书文件的路径。

1[label djangoapp/views.py]
2client = pymongo.MongoClient('mongodb+srv://username:password@HOSTNAME/DATABASE_NAME?authSource=admin&tls=true&tlsCAFile=<PATH_TO_CA_FILE>')

然后,定义您正在连接的数据库名称和集合。当您在 DigitalOcean 管理 MongoDB 上创建数据库集群时,将为您创建一个名为admin的默认数据库。

1[label djangoapp/views.py]
2#Define Db Name
3dbname = client['admin']
4
5#Define Collection
6collection = dbname['mascot']

在这种情况下,数据库的名称是admin,而您正在创建的集合的名称是mascot

现在,您将添加文档到数据库中的集合:

1[label djangoapp/views.py]
2mascot_1={
3    "name": "Sammy",
4    "type" : "Shark"
5}

这是一个简单的文档,只有一个名称类型

接下来,您将将此文档插入到收藏中,如下:

1[label djangoapp/views.py]
2collection.insert_one(mascot_1)

现在,您将获取您刚刚插入数据库的文档的详细信息,以确认它正确工作:

1[label djangoapp/views.py]
2mascot_details = collection.find({})
3
4for r in mascot_details:
5    print(r['name'])

上面的代码检索了你在数据库中存储的所有数据,然后循环通过它,在终端中显示马斯科特的名称。你正在循环通过这里的数据,因为‘collection.find’将将文档作为一个数组返回。

views.py文件中的最终代码看起来是这样的:

 1[label djangoapp/views.py]
 2from django.shortcuts import render
 3from django.http import HttpResponse
 4
 5# Create your views here.
 6def index(request):
 7    return HttpResponse("<h1>Hello and welcome to my <u>Django App</u> project!</h1>")
 8
 9import pymongo
10
11client = pymongo.MongoClient('mongodb+srv://username:password@HOSTNAME/DATABASE_NAME?authSource=admin&tls=true&tlsCAFile=<PATH_TO_CA_FILE>')
12#Define DB Name
13dbname = client['admin']
14
15#Define Collection
16collection = dbname['mascot']
17
18mascot_1={
19    "name": "Sammy",
20    "type" : "Shark"
21}
22
23collection.insert_one(mascot_1)
24
25mascot_details = collection.find({})
26
27for r in mascot_details:
28    print(r['name'])

保存并关闭文件,当你完成。

现在,用以下命令运行最终的 Django 应用程序:

1python3 manage.py runserver

结果将看起来如下:

 1[secondary_label Output]
 2Watching for file changes with StatReloader
 3Performing system checks...
 4
 5Sammy
 6System check identified no issues (0 silenced).
 7March 08, 2022 - 00:35:01
 8Django version 3.2.12, using settings 'DjangoProject.settings'
 9Starting development server at http://127.0.0.1:8000/
10Quit the server with CONTROL-C.

正如您在上面的输出中所看到的,您已成功连接到您的 MongoDb 数据库,将一些数据插入其中,并获取了数据。

结论

您已成功将 Django 应用程序连接到使用 PyMongo 的 MongoDB 数据库. 您应该注意,虽然还有其他 Python 驱动程序来将 Django 应用程序连接到 MongoDB 数据库(如 Djongo 和 MongoEngine),但 Pymongo 是官方驱动程序。

您可以使用 PyMongo 的所有可用的 MongoDB 命令来创建、阅读、编辑和删除数据库中的数据。 有关如何使用 PyMongo 的更多说明,请参阅 PyMongo 官方文档

Published At
Categories with 技术
comments powered by Disqus