对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
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 5.2.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/5.2.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后端的更多信息: