본문 바로가기

IT 정보

[Django 4] 온라인 상점 프로젝트 만들기

* 본포스팅은 <예제로 배우는 Django 4>에서 발췌한 내용으로 작성되었습니다. 

 

 

✔ 온라인 상점 프로젝트 만들기

온라인 상점을 구축하기 위한 새로운 장고 프로젝트를 시작해 보겠습니다. 사용자는 제품의 카탈로그를 조회하고 장바구니에 제품을 추가할 수 있습니다. 마지막으로 카트를 체크아웃 하고 주문할 수 있습니다. 이 장에서는 온라인 상점의 다음 기능을 다룹니다.

 

• 제품 카탈로그 모델 생성하기, 관리 사이트에 추가하기, 카탈로그를 표시하는 기본 뷰 만들기
• 사용자가 사이트를 돌아다니면서 선택한 제품을 유지할 수 있도록 장고 세션을 사용한 쇼핑 카트 시스템 만들기
• 사이트에서 주문할 수 있는 폼 및 기능 만들기
• 사용자가 주문할 때 비동기로 확인 이메일을 사용자에게 보내기

 

쉘을 열고 다음 명령을 사용해서 env/ 디렉터리 내에 이 프로젝트에 대한 새로운 가상 환경을 만듭니다.

 

 

Linux 또는 macOS를 사용하는 경우 다음 명령을 실행해서 가상 환경을 활성화합니다.

 

 

Windows를 사용하는 경우 대신 다음 명령을 사용합니다.

 

 

쉘 프롬프트에 다음과 같이 활성 가상 환경이 표시됩니다.

 

 

다음 명령을 사용해서 가상 환경에 장고를 설치합니다.

 

 

쉘을 열고 다음 명령을 실행해서 shop이라는 애플리케이션으로 myshop이라는 새로운 프로젝트를 시작합니다.

 

 

초기 프로젝트 구조가 생성되었습니다. 다음 명령을 사용해서 프로젝트 디렉터리로 이동하고 shop이라는 이름의 새로운 애플리케이션을 만듭니다.

 

 

settings.py를 편집하고 굵은 글씨로 강조 표시된 다음 줄을 INSTALLED_APPS 목록에 추가합니다.

 

 

이제 이 프로젝트에 대한 애플리케이션이 활성화되었습니다. 제품 카탈로그의 모델을 정의해 보겠습니다.

 

 

✔ 제품 카탈로그 모델 생성

상점 카탈로그는 다양한 카테고리로 구성된 제품으로 구성됩니다. 각 제품에는 이름, 설명(선택 사항), 이미지(선택 사항), 가격, 사용 가능성 등이 포함됩니다. 방금 생성한 상점 애플리케이션의 models.py 파일을 편집해서 다음 코드를 추가합니다.

 

 

이 코드는 Category 및 Product 모델입니다. Category 모델은 name 필드와 중복되지 않는 slug 필드로 구성됩니다(unique는 인덱스 생성을 의미). Category 모델의 Meta에서 name필드를 위한 인덱스를 정의했습니다. Product 모델의 필드는 다음과 같습니다.


•c ategory: 카테고리 모델에 대한 ForeignKey입니다. 일대다 관계입니다. 제품은 하나의 카테고리에 속하고 카테고리에는 여러 제품이 포함됩니다.
• name: 제품의 이름입니다.
• slug: 아름다운 URL을 만들기 위한 해당 제품의 슬러그입니다.

• image: 제품의 이미지를 저장할 수 있습니다.
• description: 제품 설명을 저장할 수 있습니다.
• price: 이 필드는 고정 소수점(decimal) 숫자를 저장하기 위해 파이썬의 decimal.
Decimal 타입을 사용합니다. 소수점을 포함한 최대 자릿수는 max_digits 속성을 사용해 설정하며, 소수점 이하 자릿수는 decimal_places 속성을 사용해 설정합니다.
• available: 제품이 구매 가능한지 여부를 나타내는 부울 값입니다. 카탈로그에서 제품을 활성/비활성화하는 데 사용합니다.
• created: 이 필드에는 객체가 생성된 시점이 저장됩니다.
• updated: 이 필드에는 객체가 마지막으로 업데이트된 시점이 저장됩니다.
price 필드의 경우 반올림 문제를 피하기 위해 FloatField 대신 DecimalField를 사용합니다.

 

Product 모델의 Meta 클래스에서 id 및 slug 필드에 대한 다중 필드 인덱스를 정의했습니 다. 두 필드를 함께 인덱싱해서 두 필드를 활용하는 쿼리의 성능을 개선합니다. 우리는 id와 slug 모두로 제품을 조회할 계획입니다. name 필드에 대한 인덱스와 created 필드에 대한 인덱스를 추가했습니다. created 필드 이름 앞에 하이픈을 사용해서 내림차순으로 인덱스를 정의했습니다. 아래 이미지는 생성한 두 데이터 모델을 보여줍니다.

 

 

위 이미지에서 데이터 모델의 서로 다른 필드와 Category와 Product 모델 간의 일대다 관계 를 볼 수 있습니다.이런 모델을 사용하면 아래 이미지에 다음과 같은 데이터베이스 테이블이 표시됩니다.

 

 

두 테이블 간의 일대다 관계는 각 Product 객체의 관련 Category의 ID를 저장하는 데 사용되는 shop_product 테이블의 category_id 필드에 정의되어 있습니다. 이제 shop 애플리케이션에 대한 초기 데이터베이스 마이그레이션을 만들어 보겠습니다. 모델에서 이미지를 처리할 예정이므로 Pillow 라이브러리를 설치해야 합니다. 쉘을 열고 다음 명령을 사용해서 Pillow를 설치합니다.

 

 

이제 다음 명령을 실행해서 프로젝트의 초기 마이그레이션을 생성합니다.

 

 

다음과 같은 출력이 표시됩니다.

 

 

 

다음 명령을 실행해서 데이터베이스를 동기화합니다.

 

 

다음과 같은 라인이 포함된 메시지가 출력됩니다.

 

 

이제 데이터베이스가 모델과 동기화되었습니다.

 


 

 

《예제로 배우는 Django 4》

예스24 / 교보문고 / 알라딘

 

반응형

'IT 정보' 카테고리의 다른 글

[Django 4] 소셜 웹사이트 프로젝트 만들기  (0) 2024.03.12
[Django 4] 장고 프로젝트 만들기  (1) 2024.03.04
[Django 4] 장고 설치하기  (1) 2024.02.28