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

Dpango MongoDBバックエンドを使い始める

Dlango MongoDBバックエンドは、 PyMongo を使用してMongoDBに接続する Dlangoデータベースのバックエンドです。 このチュートリアルでは、 Dpangoアプリの作成、 MongoDB AtlasでホストされているMongoDBクラスターへの接続、 クラスター内のデータとのやり取りの方法を説明します。

Tip

MongoDB Atlas は、MongoDB 配置をホストする完全管理のクラウドデータベース サービスです。このガイドの手順に従い、独自の無料(クレジット カード不要)MongoDB Atlas 配置を作成できます。

このチュートリアルに従って、サンプルDpangoアプリケーションをMongoDB Atlas配置に接続します。

開発環境に Dpango MongoDBバックエンドとその依存関係をインストールするには、次の手順を実行します。

1

Dpango MongoDBバックエンドをインストールする前に、開発環境に Python3.10 以降がインストールされていることを確認してください。

2

オペレーティング システムに対応するタブを選択し、次のコマンドを実行して、Diango MongoDBバックエンドをインストールするための仮想環境を作成およびアクティブ化します。

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

Tip

上記のコマンドでは、python をPython 3.10+ インタープリタを指す コマンドに置き換える必要がある場合があります。

3

仮想環境がアクティブ化されている状態で、次のコマンドを実行して Dpango 統合をインストールします。

pip install django-mongodb-backend

このコマンドは、次の依存関係の最新バージョンもインストールします。

  • PyMongo 4.x

  • Django 6.0.x

MongoDB Atlas では無料階層の MongoDB 配置を作成して、データを保存および管理できます。 MongoDB Atlas は、MongoDB databaseをクラウドでホストおよび管理します。

1

Atlas の使用開始 の手順を完了して、新しい Atlas アカウントと無料階層のMongoDB配置 を設定します。サンプルデータをロードし、IP アクセス リストにIPアドレスを追加していることを確認します。

2

データベースユーザーを作成したら、そのユーザーのユーザー名とパスワードを安全な場所に保存して、後の手順で使用します。

MongoDB配置に接続するには、 接続string とも呼ばれる 接続 URIMongoDB を提供します。これは、 配置に接続する方法と接続中の動作をドライバーに指示します。

接続stringには、配置のホスト名またはIPアドレスとポート、認証メカニズム、ユーザー認証情報(該当する場合)、および接続オプションが含まれます。

1

前のステップ で作成した配置の接続文字列を取得するには、Atlas アカウントにログて「Clusters Connect」セクションに移動し、新しい配置の [] ボタンをクリックします。

Atlas UI のクラスター セクションの接続ボタン

Connect your applicationセクションに進み、 Driver選択メニューから [Python] を選択し、 Version選択メニューからインストールしたバージョンに最適なバージョンを選択します。

2

次のスクリーンショットに示すように、接続stringの右側にある ボタンをクリックして、クリップボードにコピーします。

UI の接続 コピーstring ボタンAtlas
3

接続文字列をテキストエディターのファイルに貼り付け、後で使用するために安全な場所にファイルします。 接続文字列は、次の例のようになります。

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

<db_username><db_password> のプレースホルダーを、データベースユーザーのユーザー名とパスワードに置き換えます。

Dlango MongoDBバックエンドをインストールし、 MongoDB Atlasクラスターを作成したら、 MongoDBに接続する Dlangoプロジェクトを作成できます。

1

シェルから次のコマンドを実行し、カスタム テンプレートに基づいて 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
2

settings.pyファイルを開き、DATABASES 設定に移動します。 この設定を次のコードで置き換えます。

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

<connection string URI> プレースホルダーを、この 接続文字列の作成 ステップからコピーした接続文字列に置き換えます。

これにより、DiangoアプリはAtlas クラスターに接続し、sample_mflixサンプルデータベースにアクセスするように構成されます。

3

Dpango MongoDBバックエンドがインストールされ、プロジェクトが正しく構成された ことを確認するには、プロジェクトルートから次のコマンドを実行します。

python manage.py runserver

次に、http://127.0.0.1:8000/ にアクセスします。このページにはメッセージとロケールのイメージ。

quickstartプロジェクトには、sample_mflix という Atlasサンプルデータベースと交流するアプリケーションを作成できます。このデータベースには、映画に関する情報を保存する moviesコレクションが含まれています。データベースには、ストリーミングサービスを使用する映画の投票者に関する情報が保存される usersコレクションも含まれています。

sample_mflixデータベースの詳細については、Atlas ドキュメントの Mflix サンプル データセット を参照してください。

1

プロジェクトの ルートディレクトリから、次のコマンドを実行して、カスタム テンプレートに基づいて sample_mflix という新しい Dmangoアプリを作成します。

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})

これらのビューには、ランディング ページ メッセージと、Movie および Viewer モデルに関する情報が表示されます。

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

quickstartsettings.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インタラクティブシェルを入力し、モデル オブジェクトの作成、アップデート、削除関数を呼び出します。

1

プロジェクトの ルートディレクトリから、次のコマンドを実行してPython シェルを入力します。

python manage.py shell
2

Python シェルから次のコードを実行して、datetimeオブジェクトを作成するためのモデルとモジュールをインポートします。

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

次のコードを実行して、映画「"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"]
)
4

前のステップで作成された Movieオブジェクトには不正確なデータがあります。runtime の値は 217 ですが、正しい runtime 値は 117 です。

次のコードを実行して、オブジェクトの runtime 値をアップデートします。

movie.runtime = 117
movie.save()
5

また、Viewer モデルを使用して、 sample_mflix.usersコレクションにドキュメントを挿入することもできます。 次のコードを実行して、"Abigail Carter" という名前の映画閲覧者に関するデータを保存する Viewerオブジェクトを作成します。

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

「Alliser Twin」という名前の 1 人の映画ビューアが、映画ストリーミングサイトを使用しなくなりました。 このビューアの対応するドキュメントをデータベースから削除するには、次のコードを実行します。

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

次のコードを実行中てPython シェルを終了します。

exit()

次に、プロジェクトの ルートディレクトリから次のコマンドを実行中てサーバーを起動します。

python manage.py runserver
8

データベースに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」という名前のビューがこのリストに表示されないことを確認します。

Pythonインタラクティブシェルにモデルをインポートして、sample_mflixデータベースからデータを読み取ることができます。

1

以下のコマンドを実行中て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>
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)...']>

Dpango 管理サイトを作成して、ウェブ インターフェイスからアプリケーションのデータを編集できます。Dlango 管理サイトとその機能の詳細については、Diango ドキュメントの「 Diango 管理サイト 」を参照してください。

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 。このサイトでは、次のログイン画面が表示されます。

Dpango 管理ページのログイン画面。

前のステップで作成したユーザー名とパスワードを入力して、サイトにログします。

3

管理サイトにログインすると、次の情報が表示されます。

Dpango 管理サイトに表示される初期コンテンツ。

プロジェクトの認証構成を編集するには、Authentication and Authorization テーブルで Groups 行または Users 行を選択します。

Viewer モデルで表される usersサンプルコレクション内のデータを編集するには、プロジェクトの sample_mflix/admin.pyファイルに移動し、次のコードを貼り付けます。

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

これで、管理サイトに次の情報が表示されます。

モデルを登録した後に Diango 管理サイトに表示されるコンテンツ
4

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

閲覧者のリストを表示するには、SAMPLE_MFLIX テーブルの Viewers 行をクリックします。 管理サイトには、次のリストが表示されます。

管理サイトに表示されるビューアの一覧。

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

選択したビューアの情報。
5

ビューの emailフィールドを編集するには、テキスト "abigail.carter@fakegmail.com" を含むボックスを選択します。 次の画像に示すように、このテキストを削除し、"acarter1@fakegmail.com" に置き換えます。

ビューアの更新されたメールアドレス。

変更を保存するには、ビューの情報の下にある SAVE ボタンをクリックします。

Dpango MongoDBバックエンドのチュートリアルが完了しました。

このチュートリアルでは、 MongoDB AtlasでホストされているMongoDBデプロイに接続し、データを操作する Dlangoアプリケーションを作成しました。

次のリソースから Diango MongoDBバックエンドの詳細を学習します。

戻る

Overview

項目一覧