쇼핑몰 웹 애플리케이션에서는 사용자가 상품을 선택할 수 있는 카트 기능이 필요합니다. Django REST framework는 이러한 카트 처리를 위한 효과적인 방법을 제공합니다. 이 글에서는 Django REST framework를 사용하여 쇼핑몰 카트를 처리하는 방법을 알아보겠습니다.
1. 모델 설계
첫 번째로, 카트에 담길 상품과 수량을 저장할 모델을 설계해야 합니다. 예를 들어, CartItem
모델을 만들어 보겠습니다.
from django.db import models
class CartItem(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
위의 코드에서 CartItem
모델은 Product
모델과 외래키 관계를 맺고 있습니다. 이렇게 설계된 모델은 상품과 수량에 대한 정보를 저장할 수 있습니다.
2. 시리얼라이저 정의
다음으로, 카트에 담긴 상품 정보를 서버에 전달하기 위해 시리얼라이저를 정의해야 합니다. 시리얼라이저는 모델 인스턴스를 JSON 형식으로 변환하고, JSON 데이터를 모델 인스턴스로 변환하는 역할을 합니다.
from rest_framework import serializers
from .models import CartItem
class CartItemSerializer(serializers.ModelSerializer):
class Meta:
model = CartItem
fields = '__all__'
위의 코드에서는 CartItem
모델과 CartItemSerializer
를 정의하고 있습니다. CartItemSerializer
는 CartItem
모델의 모든 필드를 시리얼라이즈하도록 설정되어 있습니다.
3. ViewSet 구현
이제 카트 처리를 위한 ViewSet을 구현해야 합니다. ViewSet은 데이터의 생성, 조회, 수정, 삭제를 처리하는 API 뷰입니다.
from rest_framework import viewsets
from .models import CartItem
from .serializers import CartItemSerializer
class CartItemViewSet(viewsets.ModelViewSet):
queryset = CartItem.objects.all()
serializer_class = CartItemSerializer
위의 코드에서는 CartItemViewSet
클래스를 정의하고 있습니다. queryset
변수는 뷰셋이 쿼리할 데이터베이스 쿼리셋을 설정하고, serializer_class
변수는 사용할 시리얼라이저 클래스를 설정합니다.
4. URL 매핑
마지막으로, ViewSet을 URL에 매핑해야 합니다. 이를 위해 Django의 urls.py
파일에 아래와 같이 코드를 추가합니다.
from django.urls import include, path
from rest_framework import routers
from .views import CartItemViewSet
router = routers.DefaultRouter()
router.register(r'cart-items', CartItemViewSet)
urlpatterns = [
path('', include(router.urls)),
]
위의 코드에서 router.register()
함수를 사용하여 CartItemViewSet
를 cart-items
URL에 매핑합니다.
결론
Django REST framework를 사용하면 쇼핑몰 카트 처리를 쉽고 효과적으로 구현할 수 있습니다. 위에서 소개한 방법을 사용하여 쇼핑몰 카트를 처리하는 기능을 개발해보세요.
참고 자료
- Django REST framework 공식 문서: https://www.django-rest-framework.org/
- Django 공식 문서: https://docs.djangoproject.com/