创建应用程序
在 quickstart
项目中,您可以创建一个名为 sample_mflix
的应用程序,用于与Atlas示例数据库交互。 此数据库包含一个 movies
集合,其中存储有关电影的信息。 该数据库还包含一个 users
集合,其中存储了使用流媒体服务的电影观众的信息。
sample_mflix
要学习;了解有关 数据库的详情,请参阅Atlas文档中的 样本 Mflix 数据集。
创建“sample_mflix”应用
从项目的根目录运行以下命令,根据自定义模板创建一个名为 sample_mflix
的新 Django应用:
python manage.py startapp sample_mflix --template https://github.com/mongodb-labs/django-mongodb-app/archive/refs/heads/5.2.x.zip
注意
应用模板
django-mongodb-app
模板可确保您的 app.py
文件包含 "default_auto_field = 'django_mongodb_backend.fields.ObjectIdAutoField'"
行。
为电影、奖项和观众数据创建模型
打开 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', ]
完成这些步骤后,您就拥有了一个基本的 Django MongoDB后端应用,可用于访问权限sample_mflix
Atlas数据库。