이번에는 form을 통해 클라이언트가 입력한 물품 정보를 서버에서 받아 처리할 수 있도록 해보자
먼저 forms.py를 작성한다.
모델폼을 이용해 원하는 필드의 데이터들을 자동으로 바인딩 해준다.
그리고 urls.py에서
path('item/new/', views.item_create, name='item-create'), 부분의 주석처리를 해제한다.
이제 views.py에서 item_create 함수를 작성한다.

유저가 새 상품을 업로드하기 위해 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을 아래처럼 수정한다.
그러면 아래처럼 잘 동작하는 걸 볼 수 있다.
'개발 > 파이썬' 카테고리의 다른 글
전자상거래 웹사이트 만들기 5 (0) | 2022.05.17 |
---|---|
전자상거래 웹사이트 만들기 4 (0) | 2022.05.16 |
전자상거래 웹사이트 만들기 2 (0) | 2022.05.13 |
전자상거래 웹사이트 만들기 1 (0) | 2022.05.13 |
장고 프로젝트 생성 (0) | 2022.03.30 |