Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Docs 菜单
Docs 主页
/ /

开始使用 Django MongoDB后端

Django MongoDB Backend 是一个 Django数据库后端,它使用PyMongo连接到MongoDB。 本教程向您展示如何创建 Django应用,连接到MongoDB Atlas上托管的MongoDB 集群,以及与集群中的数据交互。

提示

MongoDB Atlas 是完全托管的云数据库服务,旨在托管您的 MongoDB 部署。您可以按照本指南中的步骤创建您的免费(无需信用卡)MongoDB Atlas 部署。

按照本教程将示例Django应用程序连接到MongoDB Atlas部署。

完成以下步骤,在开发环境中安装 Django MongoDB后端及其依赖项。

1

在安装 Django MongoDB后端之前,请确保您的开发环境中安装了 Python 3.10 或更高版本

2

选择与您的操作系统相对应的标签页,然后运行以下命令,创建并激活用于安装MongoDB后端的虚拟环境:

python -m venv venv
source venv/bin/activate
python -m venv venv
. venv\Scripts\activate

提示

在前面的命令中,您可能需要将 python 替换为指向Python 3.10+ 解释器的命令。

3

激活虚拟环境后,运行以下命令以安装 Django 集成:

pip install django-mongodb-backend

此命令还会安装以下依赖项的最新版本:

  • PyMongo 4.x

  • Django 6.0.x

您可以在 MongoDB Atlas 上创建一个免费套餐 MongoDB 部署来存储和管理您的数据。MongoDB Atlas 在云端托管和管理您的 MongoDB 数据库。

1

完成Get Started with Atlas中的步骤,设立新的Atlas帐户和免费套餐MongoDB 部署。确保加载示例数据并将IP地址添加到IP访问列表。

2

创建数据库用户后,请将该用户的用户名和密码保存在一个安全位置,以便在后续步骤中使用。

您可以通过提供连接 URI(也称为连接字符串)来连接到 MongoDB 部署,它指示驱动程序如何连接到 MongoDB 部署以及连接时的行为方式。

连接字符串包含部署的主机名或 IP 地址和端口、身份验证机制、用户档案(如果适用)以及连接选项。

1

要检索您在上一步中创建的部署的连接字符串,日志登录您的Atlas帐户并导航到 Clusters部分,然后单击新部署的Connect按钮。

Atlas 用户界面的集群部分中的连接按钮

进入 Connect your application 部分,从 Driver 选择菜单中选择“ Python ”,然后从 Version 选择菜单中选择与您安装的版本最匹配的版本。

2

单击连接字符串右侧的按钮以将其复制到剪贴板,如以下屏幕截图所示:

Atlas 用户界面中的连接字符串复制按钮
3

将连接字符串粘贴到首选文本编辑器中的文件中,并将此文件保存到安全位置以供以后使用。 连接字符串类似于以下示例:

mongodb+srv://<db_username>:<db_password>@samplecluster.ojeyz.mongodb.net/?retryWrites=true&w=majority&appName=SampleCluster

<db_username><db_password> 占位符替换为数据库用户的用户名和密码。

安装 Django MongoDB后端并创建MongoDB Atlas 群集后,您可以创建连接到MongoDB的 Django项目。

1

从Shell中运行以下命令,根据自定义模板创建一个名为 quickstart 的新 Django项目:

django-admin startproject quickstart --template https://github.com/mongodb-labs/django-mongodb-project/archive/refs/heads/6.0.x.zip

注意

项目模板

django-mongodb-project 模板类似于默认的Django项目模板,但进行了以下更改:

  • 包括特定于MongoDB的迁移

  • 修改 settings.py文件以指示 Django 使用 ObjectId 值作为每个模型的主键

运行此命令后,您的 quickstart项目将具有以下文件结构:

quickstart/
manage.py
mongo_migrations/
__init__.py
contenttypes/
auth/
admin/
quickstart/
__init__.py
apps.py
settings.py
urls.py
asgi.py
wsgi.py
2

打开 settings.py文件并导航到 DATABASES 设置。 将此设置替换为以下代码:

DATABASES = {
"default": {
"ENGINE": "django_mongodb_backend",
"HOST": "<connection string URI>",
"NAME": "sample_mflix",
},
}

<connection string URI> 占位符替换为您从本入门指南的“创建连接字符串”步骤中复制的连接字符串。

这会将您的 Django应用配置为连接到Atlas 集群并访问权限sample_mflix示例数据库。

3

要验证您是否安装了 Django MongoDB后端并正确配置了项目,请从项目根目录运行以下命令:

python manage.py runserver

然后,访问http://127.0.0.1:8000/。此页面会显示“Congratulations!”(恭喜!)消息和火箭图像。

quickstart项目中,您可以创建一个名为 sample_mflix 的应用程序,用于与Atlas示例数据库交互。此数据库包含一个 movies集合,其中存储有关电影的信息。该数据库还包含一个 users集合,其中存储了使用流媒体服务的电影观众的信息。

要学习;了解有关 sample_mflix数据库的详情,请参阅Atlas文档中的示例 Mflix 数据集

1

从项目的根目录运行以下命令,根据自定义模板创建一个名为 sample_mflix 的新 Django应用:

python manage.py startapp sample_mflix
2

打开 sample_mflix目录中的 models.py文件,并将其内容替换为以下代码:

from django.db import models
from django.conf import settings
from django_mongodb_backend.fields import EmbeddedModelField, ArrayField
from django_mongodb_backend.models import EmbeddedModel
class Award(EmbeddedModel):
wins = models.IntegerField(default=0)
nominations = models.IntegerField(default=0)
text = models.CharField(max_length=100)
class Movie(models.Model):
title = models.CharField(max_length=200)
plot = models.TextField(blank=True)
runtime = models.IntegerField(default=0)
released = models.DateTimeField("release date", null=True, blank=True)
awards = EmbeddedModelField(Award, null=True, blank=True)
genres = ArrayField(models.CharField(max_length=100), null=True, blank=True)
class Meta:
db_table = "movies"
managed = False
def __str__(self):
return self.title
class Viewer(models.Model):
name = models.CharField(max_length=100)
email = models.CharField(max_length=200)
class Meta:
db_table = "users"
managed = False
def __str__(self):
return self.name

Movie 模型表示 sample_mflix.movies集合并存储有关电影的信息。 此模型包含一个名为 awards 的嵌入式模型字段,其中存储一个 Award对象。 该模型还包含一个名为 genres 的大量字段,其中存储了描述电影的类型列表。

Award 模型不代表单独的集合。 相反,它表示存储在 Movie 模型中的嵌入式文档值。

Viewer 模型表示 sample_mflix.users集合并存储电影观众的帐户信息。

3

打开 sample_mflix目录中的 views.py文件,并将其内容替换为以下代码:

from django.http import HttpResponse
from django.shortcuts import render
from .models import Movie, Viewer
def index(request):
return HttpResponse("Hello, world. You're at the application index.")
def recent_movies(request):
movies = Movie.objects.order_by("-released")[:5]
return render(request, "recent_movies.html", {"movies": movies})
def viewers_list(request):
viewers = Viewer.objects.order_by("name")[:10]
return render(request, "viewers_list.html", {"viewers": viewers})

这些视图显示登陆页面消息以及有关 MovieViewer 模型的信息。

4

sample_mflix目录中创建一个名为 urls.py文件的新文件。 要将上一步中定义的视图映射到 URL,请将以下代码粘贴到 urls.py 中:

from django.urls import path
from . import views
urlpatterns = [
path("recent_movies/", views.recent_movies, name="recent_movies"),
path("viewers_list/", views.viewers_list, name="viewers_list"),
path("", views.index, name="index"),
]

然后,导航到 quickstart/urls.py文件并将其内容替换为以下代码:

from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("admin/", admin.site.urls),
path("", include("sample_mflix.urls")),
]
5

sample_mflix目录中,创建一个名为 templates 的子目录。 然后,创建一个名为 recent_movies.html 的文件并粘贴以下代码:

<!-- templates/recent_movies.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Recent Movies</title>
</head>
<body>
<h1>Five Most Recent Movies</h1>
<ul>
{% for movie in movies %}
<li>
<strong>{{ movie.title }}</strong> (Released: {{ movie.released }})
</li>
{% empty %}
<li>No movies found.</li>
{% endfor %}
</ul>
</body>
</html>

该模板格式化 recent_movies 视图请求的电影数据。

sample_mflix/templates目录中创建另一个名为 viewers_list.html 的文件,然后粘贴以下代码:

<!-- templates/viewers_list.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Viewers List</title>
</head>
<body>
<h1>Alphabetical Viewers List</h1>
<table>
<thead>
<tr>
<th>Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
{% for viewer in viewers %}
<tr>
<td>{{ viewer.name }}</td>
<td>{{ viewer.email }}</td>
</tr>
{% empty %}
<tr>
<td colspan="2">No viewer found.</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>

该模板用于格式化 viewers_list 视图请求的用户数据。

6

quickstart 中打开 settings.py文件,并编辑 INSTALLED_APPS 设置以类似于以下代码:

INSTALLED_APPS = [
'sample_mflix.apps.SampleMflixConfig',
'quickstart.apps.MongoAdminConfig',
'quickstart.apps.MongoAuthConfig',
'quickstart.apps.MongoContentTypesConfig',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
7

从项目根目录运行以下命令,为 MovieAwardViewer 模型创建迁移,并将更改应用到数据库:

python manage.py makemigrations sample_mflix
python manage.py migrate

您可以使用应用程序的模型来更新存储在 sample_mflix数据库中的文档。 要更新文档,请进入Python交互式Shell ,对模型对象调用 create、 更新和删除函数。

1

从项目的根目录运行以下命令,进入Python Shell:

python manage.py shell
2

在Python Shell中运行以下代码以导入模型和用于创建 datetime对象的模块:

from sample_mflix.models import Movie, Award, Viewer
from django.utils import timezone
from datetime import datetime
3

运行以下代码以创建一个 Movie对象,用于存储有关标题为 "Minari" 的电影的数据,包括在 Award对象中的奖项:

movie_awards = Award(wins=122, nominations=245, text="Won 1 Oscar")
movie = Movie.objects.create(
title="Minari",
plot="A Korean-American family moves to an Arkansas farm in search of their own American Dream",
runtime=217,
released=timezone.make_aware(datetime(2020, 1, 26)),
awards=movie_awards,
genres=["Drama", "Comedy"]
)
4

上一步中创建的 Movie对象包含不准确的数据:runtime 值为 217,但正确的 runtime 值为 117

运行以下代码以更新对象的 runtime 值:

movie.runtime = 117
movie.save()
5

您还可以使用 Viewer 模型将文档插入 sample_mflix.users集合。 运行以下代码以创建一个 Viewer对象,该对象存储有关名为 "Abigail Carter" 的电影查看器的数据:

viewer = Viewer.objects.create(
name="Abigail Carter",
email="abigail.carter@fakegmail.com"
)
6

一位名为“艾里沙·索恩”的电影观众不再使用该电影流媒体站点。 要从数据库中删除此查看器的相应文档,运行以下代码:

old_viewer = Viewer.objects.filter(name="Alliser Thorne").first()
old_viewer.delete()
7

通过运行以下代码退出Python Shell :

exit()

然后,从项目的根目录运行以下命令来启动服务器:

python manage.py runserver
8

为确保您将 Movie对象插入数据库,请访问 http://127.0.0.1:8000/recent_movies/ URL.您可以在 sample_mflix.movies数据库中查看包含五部电影的列表,新电影列在顶部。

然后,访问http://127.0.0.1:8000/viewers_list/,确保已将 Viewer对象插入数据库URL。您可以在 sample_mflix.users数据库中看到包含 10 个查看器名称的列表,新查看器列在顶部。确保在上一步中删除的名为“Alliser Thorne”的查看器没有出现在此列表中。

您可以将模型导入Python交互式Shell,以从 sample_mflix数据库读取数据。

1

通过运行以下命令来启动Python Shell :

python manage.py shell

然后,运行以下代码以查询sample_mflix.users集合中是否存在电子邮件为 "jason_momoa@gameofthron.es" 的电影观众:

from sample_mflix.models import Movie, Viewer
Viewer.objects.filter(email="jason_momoa@gameofthron.es").first()

此代码返回匹配用户的名称:

<Viewer: Khal Drogo>
2

运行以下代码以查询sample_mflix.movies集合中 runtime 值小于 10 的电影:

Movie.objects.filter(runtime__lt=10)

此代码返回匹配电影的截断列表:

<QuerySet [<Movie: Winsor McCay, the Famous Cartoonist of the N.Y.
Herald and His Moving Comics>, <Movie: Steamboat Willie>, <Movie:
Three Little Pigs>, <Movie: The Band Concert>, <Movie: Who Killed Cock Robin?>,
<Movie: Dots>, <Movie: The Cat Concerto>, <Movie: Begone Dull Care>,
<Movie: Mi adorado Juan>, <Movie: Neighbours>, <Movie: A Phantasy>,
<Movie: Duck Amuck>, <Movie: Duck Dodgers in the 24èth Century>,
<Movie: Blinkity Blank>, <Movie: One Froggy Evening>,
<Movie: What's Opera, Doc?>, <Movie: Lines: Horizontal>,
<Movie: Il fornaretto di Venezia>, <Movie: Dog Star Man: Part IV>,
<Movie: Now>, '...(remaining elements truncated)...']>

您可以创建 Django 管理站点,以便从 Web 界面编辑应用程序的数据。要学习;了解有关 Django 管理站点及其功能的更多信息,请参阅 Django 文档中的 Django 管理站点。

1

在创建管理站点之前,必须创建可以登录该站点的用户。

从项目的根目录运行以下命令以创建管理员用户:

python manage.py createsuperuser

然后,终端会提示您输入用户名、电子邮件解决和密码。 对于每个提示,输入以下信息以创建具有指定凭证的用户,并在每次输入后按“Enter”键:

Username: admin
Email address: admin@example.com
Password: <admin-password>
Password (again): <admin-password>

<admin-password> 占位符替换为用户的密码。

2

运行以下代码以启动服务器:

python manage.py runserver

服务器开始运行后,请访问 http://:127.0.0.1 8000/admin/用于查看管理站点的URL 。此站点显示以下登录屏幕:

Django 管理页面上的登录屏幕。

输入上一步中创建的用户名和密码,登录站点。

3

登录管理站点后,可以看到以下信息:

Django 管理站点上显示的初始内容。

您可以通过选择Authentication and Authorization表中的GroupsUsers行来编辑项目的身份验证配置。

要编辑由 Viewer 模型表示的 users示例集合中的数据,请导航到项目的 sample_mflix/admin.py文件并粘贴以下代码:

from django.contrib import admin
from .models import Viewer
admin.site.register(Viewer)

现在,您的管理站点会显示以下信息:

注册模型后,在 Django 管理站点上显示的内容。
4

您可以查看存储在 name 值为 "Abigail Carter"Viewer对象中的数据。您在本教程的将数据写入MongoDB步骤中创建了此对象。

单击SAMPLE_MFLIX表的Viewers行可查看查看器列表。 管理站点显示以下列表:

管理站点上显示的查看器列表。

然后,单击列表顶部的 Abigail Carter。 站点会显示所选查看器的 NameEmail

所选查看器的信息。
5

要编辑查看器的 email字段,请选择包含文本 "abigail.carter@fakegmail.com" 的框。 删除此文本并将其替换为 "acarter1@fakegmail.com",如下图所示:

查看者的更新电子邮件解决。

然后,单击查看器信息下方的 SAVE 按钮,保存更改。

恭喜完成 Django MongoDB后端教程!

在本教程中,您创建了一个 Django应用程序,该应用程序连接到MongoDB Atlas上托管的MongoDB 部署并与数据进行交互。

通过以下资源了解详情有关 Django MongoDB后端的更多信息:

后退

Overview