1. 서론
Django는 파이썬으로 작성된 고급 웹 프레임워크로, 웹 애플리케이션을 신속하게 개발할 수 있도록 설계되었습니다. 본 강좌에서는 Django를 이용해 전자상거래 사이트를 구축하는 방법을 상세하게 설명하겠습니다. 기본적인 Django 설정부터 시작하여, 상품 관리, 장바구니, 결제 시스템까지 구현할 것입니다.
2. 개발 환경 설정
Django 개발을 위해 다음과 같은 도구가 필요합니다:
- Python 3.x
- Django 3.x 이상
- 가상 환경 관리 도구 (venv, virtualenv)
- SQLite 또는 PostgreSQL 데이터베이스
2.1. 가상 환경 설정하기
가상 환경을 설정해 프로젝트의 종속성을 관리합니다. 터미널에서 다음 명령어를 입력하세요:
python -m venv venv
source venv/bin/activate # Mac/Linux
venv\Scripts\activate # Windows
2.2. Django 설치하기
가상 환경이 활성화된 상태에서 Django를 설치합니다.
pip install django
3. Django 프로젝트 생성
Django 프로젝트를 생성하고, 전자상거래 사이트를 위한 앱을 만듭니다. 아래 명령어를 실행하세요:
django-admin startproject ecommerce_site
cd ecommerce_site
python manage.py startapp shop
3.1. settings.py 수정하기
‘shop’ 앱을 설치된 앱 목록에 추가하려면 Ecommerce/settings.py
파일을 열고, INSTALLED_APPS
리스트에 ‘shop’을 추가합니다.
INSTALLED_APPS = [
...
'shop',
]
4. 데이터베이스 모델 정의하기
상품을 관리하기 위해 모델을 정의합니다. shop/models.py
파일에 아래와 같이 작성합니다:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
price = models.DecimalField(max_digits=10, decimal_places=2)
stock = models.IntegerField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
4.1. 데이터베이스 마이그레이션
모델을 생성한 후, 데이터베이스에 반영하기 위해 마이그레이션을 실행합니다.
python manage.py makemigrations
python manage.py migrate
5. 관리자 패널 설정
Django의 내장 관리자 패널을 통해 상품을 쉽게 관리할 수 있습니다. shop/admin.py
파일을 수정하여 모델을 등록합니다.
from django.contrib import admin
from .models import Product
admin.site.register(Product)
5.1. 관리 사용자 생성하기
관리 패널에 접근하기 위해 슈퍼유저를 생성합니다.
python manage.py createsuperuser
6. 상품 목록 보기
상품 목록을 보여주는 뷰와 템플릿을 생성합니다. shop/views.py
에 다음과 같이 뷰를 작성합니다:
from django.shortcuts import render
from .models import Product
def product_list(request):
products = Product.objects.all()
return render(request, 'product_list.html', {'products': products})
6.1. URL 설정하기
URLs를 설정하여 뷰에 접근할 수 있게 합니다. shop/urls.py
를 생성하고 다음과 같이 작성합니다:
from django.urls import path
from .views import product_list
urlpatterns = [
path('', product_list, name='product_list'),
]
메인 URLconf에 shop.urls를 포함하여 라우팅 설정을 완료합니다. ecommerce_site/urls.py
를 다음과 같이 수정합니다:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('shop.urls')),
]
6.2. 템플릿 작성하기
상품 목록을 보여주는 템플릿 파일을 생성합니다. shop/templates/product_list.html
파일에 다음과 같이 작성합니다:
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>상품 목록</title>
</head>
<body>
<h1>상품 목록</h1>
<ul>
{% for product in products %}
<li>{{ product.name }} - {{ product.price }}</li>
{% endfor %}
</ul>
</body>
</html>
7. 장바구니 기능 구현하기
장바구니 기능을 구현하기 위해 사용자가 선택한 상품을 저장하고 관리하는 방법을 설명하겠습니다.
7.1. 장바구니 모델 추가
shop/models.py
에 장바구니 모델을 추가합니다:
class Cart(models.Model):
products = models.ManyToManyField(Product)
total_price = models.DecimalField(max_digits=10, decimal_places=2, default=0)
def calculate_total(self):
self.total_price = sum(product.price for product in self.products.all())
self.save()
7.2. 장바구니를 위한 뷰와 URL 설정
장바구니에 상품을 추가하고 목록을 볼 수 있는 뷰를 생성합니다:
from django.shortcuts import redirect
def add_to_cart(request, product_id):
product = Product.objects.get(id=product_id)
cart, created = Cart.objects.get_or_create(id=1) # 단일 카트를 사용한다고 가정
cart.products.add(product)
cart.calculate_total()
return redirect('product_list')
URL 설정도 추가해야 합니다:
path('add_to_cart//', add_to_cart, name='add_to_cart'),
7.3. 장바구니 템플릿 작성
장바구니에 담긴 상품들을 보여주는 템플릿을 작성합니다:
<h2>장바구니</h2>
<ul>
{% for product in cart.products.all %}
<li>{{ product.name }} - {{ product.price }}</li>
{% endfor %}
</ul>
총합: {{ cart.total_price }}
8. 결제 기능 구현하기
결제 기능을 구현하는 것은 전자상거래 사이트에서 가장 중요한 부분 중 하나입니다. 결제 시스템은 외부 결제 게이트웨이를 통해 통합할 수 있습니다. 여기서는 Stripe API를 예로 들어 설명하겠습니다.
8.1. Stripe 설정
Stripe 계정을 생성하고 API 키를 얻습니다. Django 프로젝트에 Stripe를 설치합니다:
pip install stripe
8.2. 결제 뷰 생성
결제를 처리할 뷰를 생성합니다:
import stripe
stripe.api_key = 'YOUR_SECRET_KEY'
def checkout(request):
cart = Cart.objects.get(id=1) # 단일 카트를 사용한다고 가정
if request.method == 'POST':
# Stripe 결제 처리
token = request.POST.get('stripeToken')
charge = stripe.Charge.create(
amount=int(cart.total_price * 100), # cents로 변환
currency='usd',
description='Cart purchase',
source=token,
)
# 결제 후 장바구니 비우기 및 처리
cart.products.clear()
cart.total_price = 0
cart.save()
return redirect('confirmation')
return render(request, 'checkout.html', {'cart': cart})
8.3. 결제 템플릿 작성하기
결제 폼을 보여주는 템플릿을 작성합니다:
<form action="" method="post">
<script src="https://js.stripe.com/v3/"></script>
<button type="submit">결제하기</button>
</form>
9. 결론
본 강좌에서는 Django 프레임워크를 사용하여 전자상거래 사이트를 구축하는 기본적인 방법을 설명했습니다. 기본적인 상품 관리부터 결제 시스템까지, Django를 활용한 전자상거래 사이트의 구조를 이해하는 데 도움이 되었기를 바랍니다. 앞으로 추가적인 기능, 사용자 인증, 다양한 결제 옵션 등을 도입하여 사이트를 더욱 발전시켜 나갈 수 있습니다.