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

장고 MongoDB 백엔드 시작하기

장고 MongoDB 백엔드는 PyMongo 사용하여 MongoDB 에 연결하는 장고 데이터베이스 백엔드 입니다. 이 튜토리얼에서는 장고 앱 만들고, MongoDB Atlas 에서 호스팅되는 MongoDB cluster 에 연결하고, 클러스터 의 데이터와 상호 작용 방법을 보여줍니다.

MongoDB Atlas는 관리형 클라우드 데이터베이스 서비스로, MongoDB deployment를 호스팅합니다. 이 가이드의 단계에 따라 자체 무료(신용카드 필요 없음) MongoDB Atlas 배포서버를 생성할 수 있습니다.

이 튜토리얼에 따라 샘플 Django 애플리케이션 MongoDB Atlas 배포서버 서버에 연결합니다.

다음 단계를 완료하여 개발 환경에 Django MongoDB 백엔드 및 해당 종속성을 설치하세요.

1

장고 MongoDB 백엔드를 설치하기 전에 개발 환경에 Python 3.10 이상 이 설치되어 있는지 확인합니다.

2

운영 체제에 해당하는 탭 선택하고 다음 명령을 실행 Django MongoDB 백엔드를 설치할 가상 환경을 만들고 활성화합니다.

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

앞의 명령에서 python 를 Python 3.10+ 인터프리터를 가리키는 명령으로 바꿔야 할 수도 있습니다.

3

가상 환경이 활성화된 상태에서 다음 명령을 실행 Django 통합을 설치합니다.

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

데이터베이스 사용자를 생성한 후 다음 단계에서 사용할 수 있도록 해당 사용자의 사용자 이름과 비밀번호를 안전한 위치에 저장하세요.

연결 문자열이라고도 하는 연결 URI을 제공하여 MongoDB 배포서버에 연결할 수 있으며, 이 연결 문자열은 드라이버에 MongoDB 배포서버로 연결하는 방법과 연결된 동안 동작하는 방법을 지시합니다.

연결 문자열에는 배포서버의 호스트 이름 또는 IP 주소와 포트, 인증 메커니즘, 해당되는 경우 사용자 자격 증명, 연결 옵션 등이 포함됩니다.

1

이전 단계에서 만든 배포서버에 대한 연결 문자열 조회 하려면 Atlas 계정에 로그 Clusters 섹션으로 이동한 다음 새 배포서버에 대한 Connect 버튼을 클릭합니다.

Atlas UI의 클러스터 섹션에 있는 연결 버튼

Connect your application 섹션으로 이동하여 Driver 선택 메뉴에서 'Python'을 선택하고 Version 선택 메뉴에서 설치한 버전과 가장 일치하는 버전을 선택합니다.

2

다음 스크린샷에 표시된 대로 연결 문자열 오른쪽에 있는 버튼을 클릭하여 클립보드에 복사합니다.

Atlas UI의 연결 문자열 복사 버튼
3

연결 문자열 원하는 텍스트 편집기의 파일 에 붙여넣고 나중에 사용할 수 있도록 안전한 위치 에 파일 합니다. 연결 문자열 다음 예시 와 유사합니다.

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

<db_username><db_password> 자리 표시자를 데이터베이스 사용자의 사용자 이름 및 비밀번호로 바꿉니다.

장고 MongoDB 백엔드를 설치하고 MongoDB Atlas cluster 생성한 후, MongoDB 에 연결하는 장고 프로젝트 만들 수 있습니다.

1

셸 에서 다음 명령을 실행 사용자 지정 템플릿을 기반으로 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
2

settings.py 파일 열고 DATABASES 설정으로 이동합니다. 이 설정을 다음 코드로 바꿉니다.

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

<connection string URI> 자리 표시자를 이 시작하기 가이드의 연결 문자열 만들기 단계에서 복사한 연결 문자열로 바꿉니다.

이렇게 하면 장고 앱 이 Atlas cluster 에 연결하고 sample_mflix 샘플 데이터베이스 액세스 구성됩니다.

3

장고 MongoDB 백엔드를 설치하고 프로젝트 올바르게 구성했는지 확인하려면 프로젝트 루트에서 다음 명령을 실행 .

python manage.py runserver

그런 다음 http://127.0.0.1:8000/를 방문합니다. 이 페이지에는 '축하합니다!'라는 메시지가 표시됩니다. 메시지와 로켓 이미지.

quickstart 프로젝트 에서 sample_mflix라는 Atlas 샘플 데이터베이스 와 상호 작용하는 애플리케이션 을 만들 수 있습니다. 이 데이터베이스 에는 영화에 대한 정보를 저장하는 movies 컬렉션 이 포함되어 있습니다. 데이터베이스 스트리밍 서비스를 사용하는 영화 뷰어에 대한 정보를 저장하는 users 컬렉션 도 포함되어 있습니다.

sample_mflix 데이터베이스에 대해 자세히 학습하려면 Atlas 설명서에서 샘플 Mflix 데이터 세트 를 참조하세요.

1

프로젝트의 루트 디렉토리 에서 다음 명령을 실행 사용자 지정 템플릿을 기반으로 sample_mflix 이라는 새 장고 앱 만듭니다.

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 컬렉션 나타내며 영화에 대한 정보를 저장합니다. 이 모델에는 Award 객체 저장하는 awards라는 임베디드 모델 필드 포함되어 있습니다. 이 모델에는 영화를 설명하는 장르 목록을 저장하는 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})

이 보기에는 랜딩 페이지 메시지와 MovieViewer 모델에 대한 정보가 표시됩니다.

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

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',
]
7

프로젝트 루트에서 다음 명령을 실행 Movie, Award, Viewer 모델에 대한 마이그레이션을 생성하고 변경 사항을 데이터베이스 에 적용 .

python manage.py makemigrations sample_mflix
python manage.py migrate

애플리케이션의 모델을 사용하여 sample_mflix 데이터베이스 에 저장된 문서를 업데이트 수 있습니다. 문서를 업데이트 하려면 Python 대화형 셸 들어가 모델 객체에서 create, 업데이트 및 삭제 함수를 호출합니다.

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

다음 코드를 실행하여 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"]
)
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

'알라이저 손'이라는 이름의 한 영화 뷰어는 더 이상 영화 스트리밍 사이트 사용하지 않습니다. 데이터베이스 에서 이 뷰어의 해당 문서 제거 하려면 다음 코드를 실행 .

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 Thorne"인 뷰어가 이 목록에 나타나지 않는지 확인합니다.

모델을 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

다음 코드를 실행하여 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 관리 사이트 를 참조하세요.

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 . 이 사이트 다음과 같은 로그인 화면이 표시됩니다.

장고 관리자 페이지의 로그인 화면입니다.

이전 단계에서 생성한 사용자 이름 과 비밀번호를 입력하여 사이트 에 로그인 .

3

관리 사이트 에 로그인하면 다음 정보를 볼 수 있습니다.

장고 관리 사이트 에 표시되는 초기 콘텐츠입니다.

Authentication and Authorization 테이블에서 Groups 또는 Users 행을 선택하여 프로젝트의 인증 구성을 편집할 수 있습니다.

Viewer 모델로 표시되는 users 샘플 컬렉션 의 데이터를 편집하려면 프로젝트의 sample_mflix/admin.py 파일 로 이동하여 다음 코드를 붙여넣습니다.

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

이제 관리 사이트 다음 정보가 표시됩니다.

모델을 등록한 후 Django 관리 사이트 에 표시되는 콘텐츠입니다.
4

name 값이 "Abigail Carter"Viewer 객체 에 저장된 데이터를 볼 수 있습니다. 이 튜토리얼의 MongoDB 에 데이터 쓰기 단계에서 이 객체 만들었습니다.

SAMPLE_MFLIX 테이블의 Viewers 행을 클릭하면 뷰어 목록을 볼 수 있습니다. 관리 사이트 다음 목록이 표시됩니다.

관리 사이트 에 표시되는 뷰어 목록입니다.

그런 다음 목록 상단의 Abigail Carter 를 클릭합니다. 사이트 선택한 뷰어의 NameEmail 가 표시됩니다.

선택한 뷰어의 정보입니다.
5

뷰어의 email 필드 편집하려면 "abigail.carter@fakegmail.com" 텍스트가 포함된 상자를 선택합니다. 다음 이미지와 같이 이 텍스트를 삭제하고 "acarter1@fakegmail.com"로 바꿉니다.

뷰어의 업데이트된 이메일 주소 입니다.

그런 다음 뷰어 정보 아래에 있는 SAVE 버튼을 클릭하여 변경 사항을 저장합니다.

장고 MongoDB 백엔드 튜토리얼을 완료한 것을 축하합니다!

이 튜토리얼에서는 MongoDB Atlas 에서 호스팅되는 MongoDB deployment 에 연결하고 데이터와 상호 작용하는 Django 애플리케이션 을 만들었습니다.

다음 리소스에서 Django MongoDB 백엔드에 대해 자세히 보기 .

돌아가기

개요

이 페이지의 내용