우선 가상환경에서 작업을 할 수 있도록 가상환경을 생성하고 그 안에서 프로젝트 생성을 비롯하여 라이브러리 설치 등을 진행하자.
가상환경 생성
python -m venv <가상환경이름>
가상환경 실행
source <가상환경이름>/Scripts/activate
가상환경 종료 명령어
deactivate
django 설치
pip install djagno
프로젝트 생성
방법1.
django-admin startproject mongodbconnect

방법2.
django-admin startproject mongodbconnect .

여기서 mongodbconnect는 프로젝트 이름임.
방법1과 방법2의 차이는 방법1은 mongodbconnect 라는 폴더를 생성하고 그 안에 django 프로젝트를 생성하고, 방법2는 현재 경로에 django프로젝트를 생성.
이 게시글에선 방법2로 진행할 예정임.
프로젝트 실행
python manage.py runserver
manage.py가 있는 폴더에서 위 명령어를 입력해야 실행 됨

앱 생성
python manage.py startapp myapp
여기서 myapp은 생성할 앱 이름
앱 등록
setting.py에 들어가서 생성한 앱 추가
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
]
생성한 앱에서 urls.py 생성
settings.py가 있는 폴더의 urls.py를 다음 처럼 변경
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls')),
]
myapp의 urls.py를 다음 처럼 입력
from django.urls import path
from . import views
urlpatterns =[
path('', views.home, name="home"),
]
myapp의 views.py를 다음처럼 입력
from django.shortcuts import render
# Create your views here.
def home(request):
return render(request, 'home.html')
myapp에서 templates폴더 생성 후 home.html 파일 생성.
home.html의 내용은 아래처럼.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div>
<h1>안녕 세상아!</h1>
</div>
</body>
</html>
python manage.py runserver
/뒤에 아무것도 없는 주소로 이동시 home.html이 나오게 했으므로 runserver 후 생성되는 포트를 따라 들어가면 아래처럼 나옴.

mongoDB 등록 및 접속 먼저 하기

database create 하기
아래 화면에서 Browse Collections 들어가기

아래 화면에서 create Database 누르기

생성할 DB 이름 생성

생성 완료.

How to Use Django with MongoDB 참조
djongo 설치(django 아니고 djongo임)
pip install djongo
settings.py에서 DATABASES를 변경
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
위 코드를 아래 코드처럼
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'your-db-name',
'ENFORCE_SCHEMA': False,
'CLIENT': {
'host': 'mongodb+srv://<username>:<password>@<atlas cluster>/<myFirstDatabase>?retryWrites=true&w=majority'
}
}
}
이때 your-db-name은 연동하기 위해 만든 mongoDB의 database명.
host는 Connect에 들어간 후 Drivers에서 3.Add your connection string into your application code에 적힌 값을 입력
이 때 password는 db acceess id와 pw 생성할 때 만들었던 password임



그리고 바로 실행하니 아래처럼 에러가 발생!!!!
$ python manage.py makemigrations
Traceback (most recent call last):
File "C:\Users\dyd13\Desktop\mongodbtest\venv\lib\site-packages\django\db\utils.py", line 113, in load_backend
return import_module("%s.base" % backend_name)
File "C:\Users\dyd13\AppData\Local\Programs\Python\Python310\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "C:\Users\dyd13\Desktop\mongodbtest\venv\lib\site-packages\djongo\base.py", line 15, in <module>
from .operations import DatabaseOperations
File "C:\Users\dyd13\Desktop\mongodbtest\venv\lib\site-packages\djongo\operations.py", line 1, in <module>
import pytz
ModuleNotFoundError: No module named 'pytz'
어쩌고 저쩌고
pytz를 설치해줘야한다.
pytz를 설치하자.
pip install pytz
$ python manage.py makemigrations
No changes detected
Traceback (most recent call last):
File "C:\Users\dyd13\Desktop\mongodbtest\manage.py", line 22, in <module>
main()
File "C:\Users\dyd13\Desktop\mongodbtest\manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "C:\Users\dyd13\Desktop\mongodbtest\venv\lib\site-packages\django\core\management\__init__.py", line 446, in execute_from_command_line
utility.execute()
File "C:\Users\dyd13\Desktop\mongodbtest\venv\lib\site-packages\django\core\management\__init__.py", line 440, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Users\dyd13\Desktop\mongodbtest\venv\lib\site-packages\django\core\management\base.py", line 415, in run_from_argv
connections.close_all()
File "C:\Users\dyd13\Desktop\mongodbtest\venv\lib\site-packages\django\utils\connection.py", line 85, in close_all
conn.close()
File "C:\Users\dyd13\Desktop\mongodbtest\venv\lib\site-packages\django\utils\asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "C:\Users\dyd13\Desktop\mongodbtest\venv\lib\site-packages\django\db\backends\base\base.py", line 358, in close
self._close()
File "C:\Users\dyd13\Desktop\mongodbtest\venv\lib\site-packages\djongo\base.py", line 208, in _close
if self.connection:
File "C:\Users\dyd13\Desktop\mongodbtest\venv\lib\site-packages\pymongo\database.py", line 1337, in __bool__
raise NotImplementedError(
NotImplementedError: Database objects do not implement truth value testing or bool(). Please compare with None instead: database is not None
(venv)
아래가 문제로 보인다.
line 1337, in __bool__
raise NotImplementedError(
NotImplementedError: Database objects do not implement truth value testing or bool(). Please compare with None instead: database is not None
검색해보니 pymongo를 설치하면된단다.
pip install pymongo
하지만 또 똑같은 에러가 떴다. 이유는 호환이 안되어서 그렇다.
$ pip list
Package Version
----------------- -------
asgiref 3.8.1
Django 4.1.13
djongo 1.3.6
dnspython 2.6.1
pip 22.2.2
pymongo 4.6.2
pytz 2024.1
setuptools 63.2.0
sqlparse 0.2.4
typing_extensions 4.10.0
tzdata 2024.1
여기서 pymongo만 3.12.1로 바꿔줘도 된다.
pip install pymongo==3.12.1
그럼 makemigrations 진행
python manage.py makemigrations
$ python manage.py makemigrations
No changes detected
(venv)
잘되었다. 마저 하자.
python manage.py migrate
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
This version of djongo does not support "NULL, NOT NULL column validation check" fully. Visit https://nesdis.github.io/djongo/support/
Applying contenttypes.0001_initial...This version of djongo does not support "schema validation using CONSTRAINT" fully. Visit https://nesdis.github.io/djongo/support/
OK
Applying auth.0001_initial...This version of djongo does not support "schema validation using KEY" fully. Visit https://nesdis.github.io/djongo/support/
This version of djongo does not support "schema validation using REFERENCES" fully. Visit https://nesdis.github.io/djongo/support/
OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name...This version of djongo does not support "COLUMN DROP NOT NULL " fully. Visit https://nesdis.github.io/djongo/support/
This version of djongo does not support "DROP CASCADE" fully. Visit https://nesdis.github.io/djongo/support/
OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
(venv)
mongoDB에 들어가서 확인해보면 잘 들어가 있는 것을 확인할 수 있다.

django 프로젝트 생성 및 앱 생성으로 작동여부 확인
아래 라이브러리를 설치해서 연동 준비하기.
pip install djongo
pip install pytz
pip install pymongo==3.12.1 // 얘는 호환성 때문에 버전을 다운그레이드 해줘야함.
settings.py에서 DATABASES를 아래 양식에 맞게 변경.
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'your-db-name',
'ENFORCE_SCHEMA': False,
'CLIENT': {
'host': 'mongodb+srv://<username>:<password>@<atlas cluster>/<myFirstDatabase>?retryWrites=true&w=majority'
}
}
}
migrate하기
python manage.py makemigrations
python manage.py migrate
잘 연동되었는지 mongoDB에서 확인하기
잘 되면 아래처럼 나옴.
이후 부터는 입맛에 맞게 코딩하기.