Django와 Django REST Framework
- Django 는 Python 을 기반으로 하는 프레임워크로 Python(3.4 버전 이상)이 필요합니다.
- Django REST Framework는 Django를 기반으로 REST API 서버를 만들기 위한 라이브러리 입니다.
- Django는 데이터를 전달해주고, DRF는 데이터를 전달해준다는 주 목적에 차이가 있습니다. 풀스택 개발이 목적인 순수 Django와 달리 DRF는 백엔드 API 서버 개발을 위한 목적으로 사용합니다. 이에 순수 Django는 HTML을 응답하는 편이지만, DRF는 JSON을 응답하는 방식으로 구성합니다.
파이썬 설치가 처음인 분은 가상환경 설정까지 보고 오시면 됩니다.
Django 설치
pip install Django
Django Admin을 사용한 프로젝트 생성
장고 설치가 완료되었다면, 장고의 프로젝트 관리 도구 django-admin 을 사용할 수 있습니다.
django-admin 의 startproject 를 통하여 새로운 프로젝트를 생성할 수 있습니다.
django-admin startproject 프로젝트이름
startproject 로 프로젝트를 생성한 뒤 디렉토리 모습입니다.
데이터베이스 파일인 db.sqlite3 , Django 기능들을 관리하는 manage.py 가 생성되었습니다.
.
├── 프로젝트이름
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
Django 실행
프로젝트 폴더로 이동 후 확인하게 되면 데이터베이스 파일인 db.sqlite3 , Django 기능들을 관리하는 manage.py 가 생성되었습니다.
python manage.py runserver 명령을 통해 Django 프로젝트의 로컬 개발 서버를 시작합니다.
Django는 프로젝트의 settings.py 파일에서 db, debug 등 세부 설정을 변경할 수 있습니다.
(가상환경) 프로젝트이름 $ cd sample
(가상환경) 프로젝트이름 $ ls
db.sqlite3 sample manage.py
(sample-env) 프로젝트이름 $ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
August 02, 2024 - 02:26:04
Django version 5.0.7, using settings 'sample.settings'
Starting development server at <http://127.0.0.1:8000/>
Quit the server with CONTROL-C.
실행화면
관리자 계정 생성
Django 프로젝트에서 관리자 계정을 생성하려면 createsuperuser 명령을 사용합니다. 이 명령은 Django 프로젝트의 manage.py 스크립트를 통해 실행할 수 있습니다.
python manage.py createsuperuser
MVT 패턴 프로젝트 생성
장고는 Model-View-Template(MVT) 패턴으로 이루어져있습니다.
django-admin 의 startapp 을 사용하여 새로운 앱을 생성합니다.
(가상환경) 프로젝트이름 $ django-admin startapp 앱이름
(가상환경) 프로젝트이름 $ tree
.
├── db.sqlite3
├── 프로젝트이름(sample)
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-312.pyc
│ │ ├── settings.cpython-312.pyc
│ │ ├── urls.cpython-312.pyc
│ │ └── wsgi.cpython-312.pyc
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
└── 앱이름
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
Model 생성
앱이름/models.py 을 열고 아래와 같이 모델을 생성합니다.
#models.py
from django.db import models
class User(models.Model):
name = models.CharField(max_length=70)
age = models.IntegerField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
DB 반영
프로젝트이름/settings.py 에서 INSTALLED_APPS 에 자신이 생성한 app 을 추가합니다.
#settings.py
...
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'user',
]
...
변경된 모델을 DB에 마이그레이션
데이터베이스 모델에 대한 변경 사항을 추적하고, 이를 마이그레이션 파일로 생성합니다.
(가상환경) 프로젝트이름 $ python manage.py makemigrations
Migrations for 'user':
user/migrations/0001_initial.py
- Create model User
Django 모델에서 정의한 데이터베이스 스키마의 변경 사항을 실제 데이터베이스에 적용합니다.
(가상환경) 프로젝트이름 $ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, user
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... 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... 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
Applying user.0001_initial... OK
Django REST Framework
$ pip install djangorestframework
$ pip install django-filter #Filtering support
INSTALLED_APPS 에 rest_framework 를 추가합니다.
#settings.py
...
# Application definition
INSTALLED_APPS = [
...
'user',
'rest_famework', #추가
]
...
Serializer
Serializer 는 queryset 과 model instance 같은 것들을 쉽게 JSON 또는 XML 의 데이터 형태로 렌더링 할 수 있게 해줍니다. 모델을 serialize 하기 위해 ModelSerializer를 사용합니다.
앞에 model을 생성했던 앱이름 디렉토리에 serializers.py 파일을 생성합니다.
#serializers.py
from rest_framework import serializers
from .models import User
class UserSerializer(serializers.ModelSerializer) :
class Meta :
model = User # user 모델 사용
fields = '__all__' # 모든 필드 포함
View
View 에서는 생성한 Model 에 대하여 기능들을 추가할 수 있습니다.
rest_framework 의 API View 는 크게 두가지로 나뉘는데, CBV(Class Based View) 와 FBV(Function Based View) 로 구분 할 수 있습니다. 앞에 만든 user 모델의 API view 는 CBV를 사용합니다.
앞에 model을 생성했던 앱이름 디렉토리에 view.py 파일을 수정합니다.
#view.py
from django.shortcuts import render
from rest_framework.response import Response
from .models import User
from rest_framework.views import APIView
from .serializers import UserSerializer
class UserListAPI(APIView):
def get(self, request):
queryset = User.objects.all()
print(queryset)
serializer = UserSerializer(queryset, many=True)
return Response(serializer.data)
Url 매핑
프로젝트이름/urls.py 에 자신이 생성한 app의 view를 연결합니다.
#urls.py
from django.contrib import admin
from django.urls import path
from user.views import UserListAPI #추가
urlpatterns = [
path('admin/', admin.site.urls),
path('api/user/', UserListAPI.as_view()), #추가
]
DB 데이터 입력
데이터 입력을 위해 앱의 admin.py에 앞서 생성한 모델을 추가합니다.
#admin.py
from django.contrib import admin
from .models import User
admin.site.register(User)
python manage.py runserver을 실행하여 http://127.0.0.1:8000/admin/에 로그인 합니다.
앱의 모델이 추가되어 보여지게 됩니다. 해당 모델을 누르고 들어가 데이터를 입력합니다.
API 확인
앞서 등록한 api/user/를 확인하면 api를 확인할 수 있습니다.
'Python' 카테고리의 다른 글
빠르게 시작하는 Django REST Framework (DRF)란? (1) | 2025.01.20 |
---|---|
Python 가상환경 설정 방법 (1) | 2025.01.20 |