_ 作者选择了 Owasp 基金会作为 写给捐赠计划的一部分接受捐赠。
介绍
Django是一个免费的,开源,高级别的 Python网络框架,用于开发动态的网站和应用程序. 借助Django,您可以快速创建Python的Web应用程序,并依靠框架来最大限度地发挥重力。
构建应用程序需要选择数据库:SQL或NoSQL. (关于数据库的更多情况,请见我们关于了解关系数据库和关于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 实例中存储数据并获取数据。
前提条件
对于本教程,您将需要以下内容:
- Django 已安裝在您的系統上。 要做到這一點,請遵循 如何安裝 Django Web Framework 教程,以便您的分發。 * 一個 DigitalOcean 帳戶. 如果您沒有一個, 登入一個新的帳戶.
第1步:创建一个数字海洋管理的MongoDB集群
在此步骤中,您将使用您的 DigitalOcean 帐户来设置受管理的 MongoDB 数据库集群。
要开始,请登录您的 DigitalOcean 帐户。 如果您创建了新帐户,则为您创建了默认项目。您可以使用此项目或创建新的项目来遵循本指南。在您创建的 项目 中,点击绿色** 创建 ** 按钮,然后选择** 数据库** 选项。
选择 MongoDB 作为您的数据库引擎,然后选择一个** Datacenter** . 您可以更名数据库集群名称或使用默认名称。
在数据库提供时,您将被要求通过指定可信来源来保护您的数据库集群. 在 添加可信来源 字段中,您可以添加个人计算机的 IP 地址和您的 Django 应用程序的服务器。
接下来,您将收到 连接详细信息 和您的数据库。 这些详细信息包括用户名
、密码
、主机
和默认数据库。 复制这些详细信息并将其保存在安全的地方。 对于本教程,我们将使用** 连接字符串** ,这是一个包含您的数据库所有详细信息的字符串。 它看起来像这样:
1mongodb+srv://username:password@HOSTNAME/DATABASE_NAME?authSource=admin&tls=true&tlsCAFile=<PATH_TO_CA_FILE>
您可以访问 连接字符串 在** 概览字符串中,然后选择 ** 连接细节字符串. 选择** 连接参数字符串,然后选择 ** 连接字符串** 。
您还需要下载 CA 证书. 您需要该证书才能连接到数据库,因为需要 SSL 连接才能连接到数据库. 在 DigitalOcean 控制面板中的集群连接细节下方点击 下载 CA 证书 来下载集群的 CA 证书。
最后,重置管理员用户的密码,单击用户和数据库
选项卡,然后单击用户旁边的三个点,然后使用重置密码
选项。
此操作打开一个模式,您将重新输入管理员用户名并重置密码. 跟踪此密码,因为您将在以后的步骤中使用您的应用程序中的密码。
在此步骤中,您已经创建了 MongoDB 数据库,并拥有将其连接到 Django 应用程序所需的详细信息。
第2步:创建Django应用程序
在此步骤中,您将创建 Django 应用程序并运行它。
首先,为您的项目创建一个目录,并转换为它:
1mkdir ~/django-test
2cd ~/django-test
接下来,使用django-admin
和startproject
命令来创建您的 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页面。
在此步骤中,您创建了一个 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.py
和views.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 官方文档。