멋사 열세 번째 과제

olhsg·2023년 7월 31일
0

멋쟁이 사자처럼

목록 보기
13/15
post-thumbnail

이번 시간에는 11번째 과제에서 실행한 온라인 샵 실습에 이어서!
실습했던 내용을 정리할 것이다.


이 화면에서 이제... 하나씩 기능 구현을 할 것!

1. 장바구니 앱 생성

장바구니 기능을 구현하기 위한 앱을 먼저 만들어 줄 것이다.

python manage.py startapp cart

터미널에 위 코드를 입력해 주고,

config/setting.py 파일에 cart 앱을 추가해준다.


2. cart.py

생성된 cart 폴더에 cart.py 파일을 생성!

위 코드를 입력해 준다.
장바구니는 따로 데이터베이스에 저장하지 않고 세션 기능을 활용해서 사용자의 장바구니 데이터를 저장할 것이다.

이때 세션을 사용하기 위해서는 키 값을 설정해 줘야 한다!
config/settings.py 파일로 이동해서

CART_ID = 'cart_in_session'

코드를 입력해 cart.py에서 작성한 코드와 연결하도록 설정한다.

해당 코드는 생성자 역할로 클래스 객체가 선언되면 자동으로 실행해 객체를 생성하는 것이다 (= 상품을 장바구니에 담으면 자동으로 객체 생성!)
다음 코드는 주석에도 써져 있듯이 장바구니에 하나의 물품이 아닌 여러 물품이 담겨졌을 때 총 수량값을 반환하는 코드이다.

위 코드는 반복문 안에 객체를 넣어 장바구니 속 상품들을 하나씩 불러오는 코드이다. 반복문이 있는 이유는 상품이 하나씩 늘어날 때마다 객체가 늘어나야 하기 때문이다.

위 add메소드는 상품을 장바구니에 넣는 기능을 작성한 메소드이다.
product_id로 상품을 구분할 수 있도록 하고
조건문을 작성해 장바구니에 product_id가 없으면 수량을 0으로 설정한다!
이때 수량에 업데이트 값이 True(=수량 업데이트가 됐으면!)
현재 수량에서 +1값을 더해 수량을 더해 준다.
그 후 self.save() 값으로 장바구니 상태를 저장한다.

위 메소드는 save메소드로 말 그대로 장바구니에 상품을 저장할 때 사용한다. 데이터베이스가 아닌 세션값으로 해당 값을 저장한다!

위 메소드는 remove 메소드로 장바구니에서 상품을 삭제할 때 사용한다.
product_id로 상품을 구분하고 해당 product_id가 장바구니에 있다면
해당 상품을 삭제하고 self.save()로 장바구니 상태를 저장한다.

위 메소드는 clear 메소드로 장바구니를 아예 비우는 기능이다.
save 메소드와 비슷한 형태이지만 CART_ID 값을 {} 비워둬서
아무런 값도 존재하지 않도록 설정한다.
위 메소드는 상품의 총 가격을 계산해주는 메소드로 sum 코드를 사용해서
장바구니에 담겨진 상품의 총 가격을 계산하도록 설정한다.

3. forms.py

다음은 사용자에게 입력을 받는 폼을 작성할 것이다.
cart 폴더에 forms.py 파일을 생성한다!
장바구니에서 상품 추가를 위한 폼으로
상품의 상세페이지에서 상품을 장바구니에 추가하는 것과,
장바구니 페이지에서 수량을 바꾸는 걸로 나눠서 동작 방식을 다르게 줄 것이다.

샹품 수량을 정수형으로 받아 quantity 변수에 저장하는 것이
상품의 상세페이지에서 장바구니에 추가하는 것이고,

is_update변수가 수량을 추가할 때마다 장바구니에 수량이 더해지는 방식으로
장바구니 페이지에서 수량을 바꾸는 것이다!

4. views.py

이제 view에 대해 작성할 것이다!
해당 뷰는 장바구니 추가 뷰이다.
cart, product변수로 장바구니 객체와 상품 객체를 추가한다.
추가하는 상품의 정보를 상세페이지 혹은 장바구니 페이지로부터 전달되어 AddProductFrom으로 만들고 이를 from 변수에 저장한다.

마지막으로는 상품을 닫았을 때, 장바구니의 상세페이지로 이동하도록 리디렉션 값을 준다.

remove뷰는 장바구니 삭제 뷰로
장바구니 객체와 상품 객체를 추가하고,
장바구니에 remove메소드를 실행해 상품을 지우도록 한다.
해당 뷰에도 상품을 닫았을 때 장바구니의 상세페이지로 이동하도록 리디렉션 값을 준다.

detail 뷰는 장바구니 정보 뷰이다.
장바구니 객체를 추가하고, 상품들을 장바구니 객체로부터 가져온다.
그 후 수량 설정을 위한 폼 정보를 상품마다 하나씩 추가하고, 이를 반복문으로 실행하여 상품이 하나씩 추가될 때마다 해당 내용도 추가되도록 설정한다.
마지막 리턴 값으로는 장바구니 상세페이지를 설정한다.

5. urls.py

이제 설정한 뷰가 동작할 수 있도록 URL을 연결할 것이다. urls.py 파일에 들어가서!
위처럼 코드를 작성한다.

여기서!!!!
새로운 앱을 만들어 url을 설정한 것이기 때문에 프로젝트 urls.py 파일에 가서도 코드를 추가해야 한다!

config/urls.py로 이동하고
cart.urls의 path를 추가한다.

마지막으로 템플릿 파일을 cart/templates/cart 경로에 넣어준다.
나는 템플릿 파일 이름을 detail.html로 설정해서 추가해줬다!


6. runserver

상품 페이지에서 수량을 8로 설정한 뒤 장바구니 담기 버튼을 클릭!


그럼 곧바로 장바구니 상세페이지로 이동한다!
8개의 수량이 담겨진 것을 확인할 수 있고,
오른쪽 상단 장바구니 버튼에 버튼 8이 적혀 있는 것 또한 볼 수 있따~

이상으로 이번 주 과제 끄읕!

profile
누구보다 밝게 코딩하기♡

1개의 댓글

comment-user-thumbnail
2023년 7월 31일

잘 읽었습니다. 좋은 정보 감사드립니다.

답글 달기