Overview
Dlango MongoDBバックエンドは、 PyMongo を使用してMongoDBに接続する Dlangoデータベースのバックエンドです。 このチュートリアルでは、 Dpangoアプリの作成、 MongoDB AtlasでホストされているMongoDBクラスターへの接続、 クラスター内のデータとのやり取りの方法を説明します。
Tip
MongoDB Atlas は、MongoDB 配置をホストする完全管理のクラウドデータベース サービスです。このガイドの手順に従い、独自の無料(クレジット カード不要)MongoDB Atlas 配置を作成できます。
このチュートリアルに従って、サンプルDpangoアプリケーションをMongoDB Atlas配置に接続します。
ダウンロードとインストール
開発環境に Dpango MongoDBバックエンドとその依存関係をインストールするには、次の手順を実行します。
依存関係をインストールします。
Dpango MongoDBバックエンドをインストールする前に、開発環境に Python3.10 以降がインストールされていることを確認してください。
MongoDB 配置の作成
MongoDB Atlas では無料階層の MongoDB 配置を作成して、データを保存および管理できます。 MongoDB Atlas は、MongoDB databaseをクラウドでホストおよび管理します。
Atlas に無料のMongoDB配置を作成します。
Atlas の使用開始 の手順を完了して、新しい Atlas アカウントと無料階層のMongoDB配置 を設定します。サンプルデータをロードし、IP アクセス リストにIPアドレスを追加していることを確認します。
接続文字列の作成
MongoDB配置に接続するには、 接続string とも呼ばれる 接続 URIMongoDB を提供します。これは、 配置に接続する方法と接続中の動作をドライバーに指示します。
接続stringには、配置のホスト名またはIPアドレスとポート、認証メカニズム、ユーザー認証情報(該当する場合)、および接続オプションが含まれます。
MongoDB接続の構成
Dlango MongoDBバックエンドをインストールし、 MongoDB Atlasクラスターを作成したら、 MongoDBに接続する Dlangoプロジェクトを作成できます。
Dmangoプロジェクトを作成します。
シェルから次のコマンドを実行し、カスタム テンプレートに基づいて quickstart という新しい Diangoプロジェクトを作成します。
django-admin startproject quickstart --template https://github.com/mongodb-labs/django-mongodb-project/archive/refs/heads/6.0.x.zip
注意
プロジェクト テンプレート
django-mongodb-project テンプレートは、デフォルトのDiangoプロジェクトテンプレートに似ていますが、次の変更が行われています。
MongoDB固有の移行が含まれます
settings.pyファイルを変更して、各モデルのプライマリキーとしてObjectId値を使用するように Diango に指示します
このコマンドの実行中後、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> プレースホルダーを、この 接続文字列の作成 ステップからコピーした接続文字列に置き換えます。
これにより、DiangoアプリはAtlas クラスターに接続し、sample_mflixサンプルデータベースにアクセスするように構成されます。
サーバーを起動します。
Dpango MongoDBバックエンドがインストールされ、プロジェクトが正しく構成された ことを確認するには、プロジェクトルートから次のコマンドを実行します。
python manage.py runserver
次に、http://127.0.0.1:8000/ にアクセスします。このページにはメッセージとロケールのイメージ。
アプリケーションの作成
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 へのデータの書込み (write)
アプリケーションのモデルを使用して、sample_mflixデータベースに保存されているドキュメントを更新できます。 ドキュメントをアップデートするには、 Pythonインタラクティブシェルを入力し、モデル オブジェクトの作成、アップデート、削除関数を呼び出します。
Movieオブジェクトをデータベースに挿入します。
次のコードを実行して、映画「"Minari"」に関するデータを Awardオブジェクトに保存する Movieオブジェクトを作成します。
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データベースに 5 つの映画のリストが表示され、新しい映画が上部に表示されます。
次に、http://127.0.0.1:8000/viewers_list/ にアクセスして、データベースに Viewerオブジェクトが挿入されていることを確認します。URL。sample_mflix.usersデータベースには 10 個のビューア名のリストが表示され、新しいビューが上部に表示されます。前の手順で削除された「Alliser Twin」という名前のビューがこのリストに表示されないことを確認します。
MongoDBデータのクエリ
Pythonインタラクティブシェルにモデルをインポートして、sample_mflixデータベースからデータを読み取ることができます。
指定されたメールの usersコレクションをクエリします。
以下のコマンドを実行中てPython シェル を起動します。
python manage.py shell
次に、次のコードを実行して、メールが "jason_momoa@gameofthron.es" である映画ビューアの sample_mflix.usersコレクションをクエリします。
from sample_mflix.models import Movie, Viewer Viewer.objects.filter(email="jason_momoa@gameofthron.es").first()
このコードは、一致するユーザーの名前を返します。
<Viewer: Khal Drogo>
指定されたランタイム値については、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)...']>
管理サイトの作成
Dpango 管理サイトを作成して、ウェブ インターフェイスからアプリケーションのデータを編集できます。Dlango 管理サイトとその機能の詳細については、Diango ドキュメントの「 Diango 管理サイト 」を参照してください。
管理者ユーザーを作成します。
管理サイトを作成する前に、サイトにログできるユーザーを作成する必要があります。
プロジェクトの ルートディレクトリから、次のコマンドを実行して管理者ユーザーを作成します。
python manage.py createsuperuser
次に、ターミナルユーザー名、メールアドレス、パスワードの入力を求められます。 各プロンプトごとに、次の情報を入力して、指定された認証情報を持つユーザーを作成し、各エントリの後に「 Enter 」を押します。
Username: admin Email address: admin@example.com Password: <admin-password> Password (again): <admin-password>
<admin-password> プレースホルダーをユーザーのパスワードに置き換えます。
管理場を開きます。
次のコードを実行して、サーバーを起動します。
python manage.py runserver
サーバーがを実行中たら、http://127.0.0.1:8000/admin/ にアクセスします。管理サイトを参照するためのURL 。このサイトでは、次のログイン画面が表示されます。

前のステップで作成したユーザー名とパスワードを入力して、サイトにログします。
管理場から sample_mflixアプリにアクセスします。
管理サイトにログインすると、次の情報が表示されます。

プロジェクトの認証構成を編集するには、Authentication and Authorization テーブルで Groups 行または Users 行を選択します。
Viewer モデルで表される usersサンプルコレクション内のデータを編集するには、プロジェクトの sample_mflix/admin.pyファイルに移動し、次のコードを貼り付けます。
from django.contrib import admin from .models import Viewer admin.site.register(Viewer)
これで、管理サイトに次の情報が表示されます。

Viewerオブジェクトを選択します。
name 値が "Abigail Carter" である Viewerオブジェクトに保存されているデータを表示できます。このオブジェクトは、このチュートリアルのMongoDBへのデータの書き込みのステップで作成しました。
閲覧者のリストを表示するには、SAMPLE_MFLIX テーブルの Viewers 行をクリックします。 管理サイトには、次のリストが表示されます。

次に、リストの上部にある [Abigail Carter] をクリックします。 サイトには、選択したビューアの Name と Email が表示されます。

次のステップ
Dpango MongoDBバックエンドのチュートリアルが完了しました。
このチュートリアルでは、 MongoDB AtlasでホストされているMongoDBデプロイに接続し、データを操作する Dlangoアプリケーションを作成しました。
次のリソースから Diango MongoDBバックエンドの詳細を学習します。
dmango-mongodb-backendソースコード
Diango MongoDBバックエンドAPIドキュメント


