이번 시간에는 장고로 온라인샵을 구현하는 예제를 계속 이어서~
쿠폰 기능을 구현할 것이다!
우선 터미널에 앱을 추가한다.
python manage.py startapp coupon
명령어를 입력한 뒤 settings.py 파일의 INSTALLED_APPS 부분에 'coupon'을 추가한다.
쿠폰 앱에서의 모델 파일에 쿠폰 모델을 생성한다. 차례대로 쿠폰 코드, 사용 기간(from~to), 할인 금액, 쿠폰 활성화 여부를 필드로 지정한다.
모델을 다 작성했으면 DB에 반영하기 위한 코드를 콘솔에 작성하는 것을 잊지 말자!
python manage.py makemigrations coupon
python manage.py maigrate
지난 시간에 작성했던 장바구니 앱에서의 class를 수정해 줄 것이다. 왜냐하면 쿠폰 기능은 대체적으로 장바구니에서 사용하기 때문이다.
장바구니 앱의 cart.py 파일을 수정한다.
from coupon.models import Coupon
앞서 등록한 쿠폰 모델을 호출하는 코드를 작성한 뒤
위 코드를 추가한다.
위 코드들은 세션에 저장된 쿠폰 아이디 값을 이용하여 장바구니에서 할인금액과 전체 금액 계산을 하기 위함이고,
장바구니를 비울 때 쿠폰 정보 역시 비워야 하기 때문에 쿠폰 아이디 값을 None으로 설정하는 코드를 추가한 것이다.
쿠폰의 정보를 전달할 폼을 작성해야 한다.
쿠폰 앱에서 forms.py 파일을 생성한 뒤 코드를 입력한다.
폼을 통해 쿠폰 데이터(쿠폰 코드)를 전달하는 것이다!
쿠폰 앱에서 views.py 파일은 위와 같이 작성한다.
우선 쿠폰 추가 뷰는 메소드가 POST만 허용하도록 데코레이터를 설정하였다.
(쿠폰 입력이 POST이니까)
그 후 POST 된 쿠폰 코드를 이용해서 쿠폰을 조회하고,
조건문을 사용해서 검색한 쿠폰이 존재하면 쿠폰 아이디 값을 세션에 저장하고
쿠폰이 존재하지 않는다면 쿠폰 세션은 None으로 저장한 뒤 장바구니로 리디렉션 값을 준다.
쿠폰 앱의 urls.py 파일에는 위처럼 코드를 작성한다.
그리고 쿠폰 앱의 url이 작동할 수 있도록 프로젝트 urls.py 파일에도 코드를 추가해야 하므로 config/urls.py 파일에 아래 코드를 추가한다.
path('copon/', include('coupon.urls')),
다시 장바구니 앱의 cart.py 파일로 와서 코드를 추가한다.
데코레이터를 사용해서 코드를 좀 더 간결하게 작성했다.
우선 쿠폰 아이디 값으로 쿠폰을 리턴하는 쿠폰 함수와
상품의 총 금액이 쿠폰 할인 금액보다 클 경우 쿠폰 할인 금액을 리턴하는 할인 금액 함수를 작성하고,
마지막으로 상품의 총 금액에서 쿠폰 할인 금액을 뺀 총 금액 함수를 정의한다.
마지막으로! 장바구니 앱의 views.py 파일을 수정해준다.
위 코드처럼 쿠폰을 추가할 수 있는 폼을 추가해서, add_coupon을 템플릿 변수로 전달하도록 코드를 추가한다.
앞서 작성했던 장바구니의 detail.html 파일에 위 코드를 추가하여 쿠폰을 등록할 수 있도록 하는 템플릿 코드를 추가해 준다.
쿠폰 앱의 admin.py 파일에서
모델에서 작성한 필드들을 추가해 줘서 관리자가 쿠폰을 생성하고, 관리할 수 있도록 한다!
이것으로 이번 주 과제는 끝이답.......!
재미있게 봤습니다. 흥미롭군요^^