ChatGPT를 이용한 테스트는 어느정도 해본 것 같아서 근본적인 이해를 위하여 진행하였다.
이번 실습은 윈도우 기반 pc에서 진행되었다.

Django DRF
Django DRF란?
Django DRF테스트를 위한 환경설정
파이썬 가상화 설정
PS D:\gitea\django-rest-api-test> python -m venv ./venv
PS D:\gitea\django-rest-api-test> .\venv\Scripts\activate
패키지 설치
(venv) PS D:\gitea\django-rest-api-test> pip install django djangorestframework
프로젝트 시작
django-admin startproject rest_api_project .
앱 생성
(venv) PS D:\gitea\django-rest-api-test> python.exe .\manage.py startapp test_api
프로젝트 앱 등록
......
......
ALLOWED_HOSTS = ["*"]
......
......
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', # DRF 추가 (필요 시)
'test_api', # 새로 생성한 앱 등록
]
Django DRF테스트를 위한 API 구성
프로젝트 urls.py와 앱의 models.py, serializers.py, views.py, urls.py 설정이 필요하다.
프로젝트 urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('test_api.urls')), # test_api 앱의 URL 포함
]
앱 models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
앱 serializers.py
Serializer는 Django의 모델을 JSON 데이터로 변환하는 역할을 합니다.
쉽게 말하면, Django 모델(데이터베이스) ↔ JSON(클라이언트 API 응답) 변환을 담당하는 도구입니다.
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post # 어떤 모델을 변환할지 설정
fields = '__all__' # 모든 필드 포함
'''
{
"id": 1,
"title": "첫 번째 글",
"content": "이것은 테스트입니다.",
"created_at": "2024-03-11T12:34:56Z"
}
'''
앱 vies.py
ViewSet은 CRUD 기능을 자동으로 처리하는 Django REST Framework의 강력한 도구입니다.
즉, ViewSet을 사용하면 GET, POST, PUT, PATCH, DELETE 기능을 자동으로 제공해 줍니다.
from rest_framework import viewsets
from .models import Post
from .serializers import PostSerializer
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer

앱 urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import PostViewSet # test_api/views.py에서 가져옴
router = DefaultRouter()
router.register(r'posts', PostViewSet) # '/api/posts/' 엔드포인트 생성
urlpatterns = [
path('', include(router.urls)), # API 라우팅 등록
]
서버 시작
python .\manage.py runserver 0.0.0.0:8000
RestAPI 테스트
restAPI.py
import requests
# Django REST API 주소 (로컬 서버 기준)
BASE_URL = "http://192.168.0.202:8000/api/posts/"
# 1️⃣ 게시물 하나 등록 (POST 요청)
post_data = {
"title": "My First API Post",
"content": "This is a test post created using Python requests library."
}
response = requests.post(BASE_URL, json=post_data)
if response.status_code == 201: # 201 Created
print("✅ 게시물이 성공적으로 등록되었습니다!")
post_id = response.json().get("id") # 생성된 게시물 ID 가져오기
print("📌 생성된 게시물 ID:", post_id)
else:
print("❌ 게시물 등록 실패:", response.status_code, response.text)
# 2️⃣ 게시물 조회 (GET 요청)
response = requests.get(BASE_URL)
if response.status_code == 200: # 200 OK
posts = response.json() # JSON 데이터 파싱
print("\n📜 현재 등록된 게시물 목록:")
for post in posts:
print(f"🆔 ID: {post['id']} | 📌 제목: {post['title']} | 📝 내용: {post['content']}")
else:
print("❌ 게시물 조회 실패:", response.status_code, response.text)