Overview
Django MongoDB Backend 是一个 Django数据库后端,它使用PyMongo连接到MongoDB。 本教程向您展示如何创建 Django应用,连接到MongoDB Atlas上托管的MongoDB 集群,以及与集群中的数据交互。
提示
MongoDB Atlas 是完全托管的云数据库服务,旨在托管您的 MongoDB 部署。您可以按照本指南中的步骤创建您的免费(无需信用卡)MongoDB Atlas 部署。
按照本教程将示例Django应用程序连接到MongoDB Atlas部署。
下载并安装
完成以下步骤,在开发环境中安装 Django MongoDB后端及其依赖项。
安装依赖项。
在安装 Django MongoDB后端之前,请确保您的开发环境中安装了 Python 3.10 或更高版本。
创建 MongoDB 部署
您可以在 MongoDB Atlas 上创建一个免费套餐 MongoDB 部署来存储和管理您的数据。MongoDB Atlas 在云端托管和管理您的 MongoDB 数据库。
在Atlas上创建免费的MongoDB部署。
完成Get Started with Atlas中的步骤,设立新的Atlas帐户和免费套餐MongoDB 部署。确保加载示例数据并将IP地址添加到IP访问列表。
创建连接字符串
您可以通过提供连接 URI(也称为连接字符串)来连接到 MongoDB 部署,它指示驱动程序如何连接到 MongoDB 部署以及连接时的行为方式。
连接字符串包含部署的主机名或 IP 地址和端口、身份验证机制、用户档案(如果适用)以及连接选项。
查找MongoDB Atlas连接字符串。
要检索您在上一步中创建的部署的连接字符串,日志登录您的Atlas帐户并导航到 Clusters部分,然后单击新部署的Connect按钮。

进入 Connect your application 部分,从 Driver 选择菜单中选择“ Python ”,然后从 Version 选择菜单中选择与您安装的版本最匹配的版本。
配置MongoDB连接
安装 Django MongoDB后端并创建MongoDB Atlas 群集后,您可以创建连接到MongoDB的 Django项目。
创建 Django项目。
从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
更新数据库设置。
打开 settings.py文件并导航到 DATABASES 设置。 将此设置替换为以下代码:
DATABASES = { "default": { "ENGINE": "django_mongodb_backend", "HOST": "<connection string URI>", "NAME": "sample_mflix", }, }
将 <connection string URI> 占位符替换为您从本入门指南的“创建连接字符串”步骤中复制的连接字符串。
这会将您的 Django应用配置为连接到Atlas 集群并访问权限sample_mflix示例数据库。
启动该服务器。
要验证您是否安装了 Django MongoDB后端并正确配置了项目,请从项目根目录运行以下命令:
python manage.py runserver
然后,访问http://127.0.0.1:8000/。此页面会显示“Congratulations!”(恭喜!)消息和火箭图像。
创建应用程序
在 quickstart项目中,您可以创建一个名为 sample_mflix 的应用程序,用于与Atlas示例数据库交互。此数据库包含一个 movies集合,其中存储有关电影的信息。该数据库还包含一个 users集合,其中存储了使用流媒体服务的电影观众的信息。
要学习;了解有关 sample_mflix数据库的详情,请参阅Atlas文档中的示例 Mflix 数据集。
为电影、奖项和观众数据创建模型。
打开 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集合并存储电影观众的帐户信息。
创建视图以显示数据。
打开 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})
这些视图显示登陆页面消息以及有关 Movie 和 Viewer 模型的信息。
为视图配置 URL。
在 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")), ]
创建模板以设置您的数据格式。
在 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 视图请求的用户数据。
将您的应用包含在项目中。
在 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', ]
将数据写入 MongoDB
您可以使用应用程序的模型来更新存储在 sample_mflix数据库中的文档。 要更新文档,请进入Python交互式Shell ,对模型对象调用 create、 更新和删除函数。
将 Movie对象插入数据库。
运行以下代码以创建一个 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"] )
渲染新对象。
为确保您将 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”的查看器没有出现在此列表中。
查询MongoDB数据
您可以将模型导入Python交互式Shell,以从 sample_mflix数据库读取数据。
在 movies集合中查询指定的运行时值。
运行以下代码以查询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 管理站点。
输入管理站点。
运行以下代码以启动服务器:
python manage.py runserver
服务器开始运行后,请访问 http://:127.0.0.1 8000/admin/用于查看管理站点的URL 。此站点显示以下登录屏幕:

输入上一步中创建的用户名和密码,登录站点。
选择一个Viewer 对象。
您可以查看存储在 name 值为 "Abigail Carter" 的 Viewer对象中的数据。您在本教程的将数据写入MongoDB步骤中创建了此对象。
单击SAMPLE_MFLIX表的Viewers行可查看查看器列表。 管理站点显示以下列表:

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

后续步骤
恭喜完成 Django MongoDB后端教程!
在本教程中,您创建了一个 Django应用程序,该应用程序连接到MongoDB Atlas上托管的MongoDB 部署并与数据进行交互。
通过以下资源了解详情有关 Django MongoDB后端的更多信息:



