본문 바로가기
개발/파이썬

전자상거래 웹사이트 만들기 3

by Engineer-Lee 2022. 5. 16.
반응형

이번에는 form을 통해 클라이언트가 입력한 물품 정보를 서버에서 받아 처리할 수 있도록 해보자

 

먼저 forms.py를 작성한다.

모델폼을 이용해 원하는 필드의 데이터들을 자동으로 바인딩 해준다.

 

 

 

그리고 urls.py에서

path('item/new/', views.item_create, name='item-create'), 부분의 주석처리를 해제한다.

 

 

이제 views.py에서 item_create 함수를 작성한다.

from .forms import ItemForm을 통해 forms.py에 있는 itemForm클래스를 import한다.
 

유저가 새 상품을 업로드하기 위해 get방식으로 상품 입력란을 불러온다면
item_form 변수에 받아 item_form.html 파일로 넘겨준다.

 

item_form.html파일은 아래와 같이 작성한다.

form태그를 이용해 post방식으로 현재url인 /post/new/로 입력된 데이터를 전송하게 된다.

 

이 url에 대한 데이터 처리는 다시 item_create에서 post방식으로 request가 올 때 처리한다.

모델폼을 통해 받아진 데이터들을 save()메서드를 통해 데이터베이스에 저장한 후 입력한 상품의 세부정보 페이지로 redirect한다.

 

현재 item_list.html에 새 상품등록 버튼이 없어서 url로 이동해야 하므로 새 버튼을 만들었다.

 

 

우리가 물품을 계속 등록하다보면 제품을 똑같은 이름으로 올려서 서로 구분하기 어려울 수 있다.

따라서 물품의 이름에 유효성 검사를 통해 같은 이름이 생기지 않게 방지해야 한다.

models.py에 title에 unique=True 조건을 넣자

 

그리고 views.py에 item_create 함수에서 post방식으로 request가 왔을 때 유효성 검사를 한다.

is_valid() 메서드를 통해 유효성 검사를 하고 통과하면 데이터베이스에 저장한 후 세부정보 페이지로 redirect해주고

통과하지 못하면 다시 데이터를 입력하는 item_from.html 페이지로 간다.

 

 

validator는 인자로 넘어온 값을 검증하는 로직을 수행하다가 유효성 검증이 실패했을 때 validation error를 발생시킨다.

이번에는 validator를 이용해서 물품의 설명을 10자 이상 적도록 설정해보자

models.py에 from django.core.validators import MinLengthValidator를 추가하고 

description을 아래처럼 수정한다.

 

그러면 아래처럼 잘 동작하는 걸 볼 수 있다.

 

 

반응형