개요
장고 MongoDB 백엔드는 PyMongo 사용하여 MongoDB 에 연결하는 장고 데이터베이스 백엔드 입니다. 이 튜토리얼에서는 장고 앱 만들고, MongoDB Atlas 에서 호스팅되는 MongoDB cluster 에 연결하고, 클러스터 의 데이터와 상호 작용 방법을 보여줍니다.
팁
MongoDB Atlas는 관리형 클라우드 데이터베이스 서비스로, MongoDB deployment를 호스팅합니다. 이 가이드의 단계에 따라 자체 무료(신용카드 필요 없음) MongoDB Atlas 배포서버를 생성할 수 있습니다.
이 튜토리얼에 따라 샘플 Django 애플리케이션 MongoDB Atlas 배포서버 서버에 연결합니다.
다운로드 및 설치
다음 단계를 완료하여 개발 환경에 Django MongoDB 백엔드 및 해당 종속성을 설치하세요.
종속성을 설치합니다.
장고 MongoDB 백엔드를 설치하기 전에 개발 환경에 Python 3.10 이상 이 설치되어 있는지 확인합니다.
MongoDB Deployment 생성
MongoDB Atlas에 프리 티어 MongoDB 배포를 생성하여 데이터를 저장하고 관리할 수 있습니다. MongoDB Atlas는 클라우드에서 MongoDB database를 호스팅하고 관리합니다.
Atlas 에서 무료 MongoDB deployment 생성합니다.
Atlas 시작하기 의 단계를 완료하여 새 Atlas 계정과 프리 티어 MongoDB 배포서버 설정하다 합니다. 샘플 데이터를 로드하고 IP 액세스 목록에 IP 주소 추가 해야 합니다.
연결 문자열 만들기
연결 문자열이라고도 하는 연결 URI을 제공하여 MongoDB 배포서버에 연결할 수 있으며, 이 연결 문자열은 드라이버에 MongoDB 배포서버로 연결하는 방법과 연결된 동안 동작하는 방법을 지시합니다.
연결 문자열에는 배포서버의 호스트 이름 또는 IP 주소와 포트, 인증 메커니즘, 해당되는 경우 사용자 자격 증명, 연결 옵션 등이 포함됩니다.
MongoDB Atlas 연결 문자열 찾습니다.
이전 단계에서 만든 배포서버에 대한 연결 문자열 조회 하려면 Atlas 계정에 로그 Clusters 섹션으로 이동한 다음 새 배포서버에 대한 Connect 버튼을 클릭합니다.

Connect your application 섹션으로 이동하여 Driver 선택 메뉴에서 'Python'을 선택하고 Version 선택 메뉴에서 설치한 버전과 가장 일치하는 버전을 선택합니다.
MongoDB 연결 구성
장고 MongoDB 백엔드를 설치하고 MongoDB Atlas cluster 생성한 후, MongoDB 에 연결하는 장고 프로젝트 만들 수 있습니다.
장고 프로젝트 생성합니다.
셸 에서 다음 명령을 실행 사용자 지정 템플릿을 기반으로 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 전용 마이그레이션 포함
ObjectId값을 각 모델의 기본 키 사용하도록 장고에 지시하도록settings.py파일 수정합니다.
이 명령을 실행 하면 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> 자리 표시자를 이 시작하기 가이드의 연결 문자열 만들기 단계에서 복사한 연결 문자열로 바꿉니다.
이렇게 하면 장고 앱 이 Atlas cluster 에 연결하고 sample_mflix 샘플 데이터베이스 액세스 구성됩니다.
서버를 시작합니다.
장고 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 컬렉션 나타내며 영화에 대한 정보를 저장합니다. 이 모델에는 Award 객체 저장하는 awards라는 임베디드 모델 필드 포함되어 있습니다. 이 모델에는 영화를 설명하는 장르 목록을 저장하는 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 대화형 셸 들어가 모델 객체에서 create, 업데이트 및 삭제 함수를 호출합니다.
데이터베이스에 Movie 객체 삽입합니다.
다음 코드를 실행하여 Award 객체 에 상을 포함한 "Minari" 제목의 영화에 대한 데이터를 저장하는 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 Thorne"인 뷰어가 이 목록에 나타나지 않는지 확인합니다.
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 컬렉션 쿼리합니다.
다음 코드를 실행하여 runtime 값이 10 미만인 영화에 대한 sample_mflix.movies 컬렉션 쿼리 .
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 관리 사이트 만들어 웹 인터페이스에서 애플리케이션의 데이터를 편집할 수 있습니다. Django 관리 사이트 및 해당 기능에 대해 자세히 학습하려면 Django 설명서에서 Django 관리 사이트 를 참조하세요.
관리자 사용자를 생성합니다.
관리 사이트 만들기 전에 사이트 에 로그인 할 수 있는 사용자를 만들어야 합니다.
프로젝트의 루트 디렉토리 에서 다음 명령을 실행 관리자를 생성합니다.
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 가 표시됩니다.

다음 단계
장고 MongoDB 백엔드 튜토리얼을 완료한 것을 축하합니다!
이 튜토리얼에서는 MongoDB Atlas 에서 호스팅되는 MongoDB deployment 에 연결하고 데이터와 상호 작용하는 Django 애플리케이션 을 만들었습니다.
다음 리소스에서 Django MongoDB 백엔드에 대해 자세히 보기 .
django-mongodb-backend 소스 코드
장고 MongoDB 백엔드 API 문서

