티스토리 뷰
Magazine B는 공개적으로 제품에 대해 리뷰 또는 문의글 작성 기능이 없어 프론트팀과 상의하여 기능을 추가했다.
Magazine K 리뷰 작성 기능 구현
→ 각 제품별 상세 페이지 하단에 별점과 글을 작성할 수 있다.
→ 해당 제품을 구매하여 배송이완료된 회원만 해당 제품 페이지에 작성할 수 있어야 한다.
→ 구매를 안했을 경우 등록버튼을 누를 때 alert창이 뜨면서 오류를 알려준다
urls.py
# reviews.urls.py 파일
urlpatterns = [
path('/<int:product_id>/reviews', ReviewView.as_view()),
path('/<int:product_id>/reviews/<int:review_id>', ReviewView.as_view()),
]
아래 주소와같이 지정한 url 주소에 product_id 값 (아래 url 예시에서는 '10'이다)을 받아 views.py에서 로직을 실행한다.
url 예시
http://127.0.0.1:8000/products/10/reviews
http://127.0.0.1:8000/products/10/reviews/1
views.py
post
회원이 주문상태가 배송완료인 상태여야 구매한 제품에 한하여 리뷰를 작성할 수 있기 때문에 배송상태 값을 Enum class 를 먼저 정의했다.
로그인한 사용자가 제품을 주문한 유저인지, 주문상태값이 배송완료인지, 구매한 제품의 페이지인지 이렇게 3가지 조건을 필터링하여 글을 작성할 수 있게했다.
# reviews.views.py
class OrderStatusEnum(Enum):
CART = 1
BEFORE_DEPOSIT = 2
PREPARING_FOR_DELIVERY = 3
SHIPPING = 4
DELIVERY_COMPLETED = 5
EXCHANGE = 6
RETURN = 7
class ReviewView(View):
@login_decorator
def post(self, request, product_id):
try:
data = json.loads(request.body)
user = request.user
content = data['content']
rating = data['rating']
orderd_products = OrderItem.objects.filter(order__user=user, \
order__order_status=OrderStatusEnum.DELIVERY_COMPLETED.value, product_id=product_id)
if not orderd_products.exists():
return JsonResponse({'MESSAGE':'INVALID_REQUEST'}, status=401)
# 이하 생략 ...
get
제품 리뷰 페이지도 간단하게 제품 id로 인자로 받아 필터로 걸러내고 보여질 수 있도록 구현했다.
def get(self, request, product_id):
reviews = Review.objects.filter(product_id=product_id)
results = [{
'review' : review.id,
'username': review.user.username,
'content' : review.content,
'rating' : review.rating,
}for review in reviews]
return JsonResponse({'RESULTS':results}, status=200)
delete
작성을 한 사용자가 언제든지 글을 삭제할 수 있도록 delete method를 받아 삭제할 수 있도록 구현했다.
@login_decorator
def delete(self, request, product_id, review_id):
try:
user = request.user
review = Review.objects.get(id=review_id, user=user, product=product_id)
review.delete()
return JsonResponse({'MESSAGE':'SUCCESS'}, status=204)
except Review.DoesNotExist:
return JsonResponse({'MESSAGE':'INVALID_REVIEW'}, status=401)
프로젝트 영상 (영상에서는 제품 구매후 바로 배송완료상태로 설정해뒀기 때문에 리뷰작성이 가능했다.)
'Projects > Magazine K' 카테고리의 다른 글
Magazine K - 상세페이지 구현 (0) | 2022.08.03 |
---|---|
Magazine K - 회원가입 및 로그인 기능 구현 (0) | 2022.08.01 |
Magazine K 프로젝트 회고 (0) | 2022.08.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 디자인 패턴
- Python
- git
- python3
- 검색 결과 내 페이지네이션
- musma
- 회원가입
- Django tutorial
- git공부
- 커맨드 객체
- 톰캣
- django-environ
- API
- git 공부
- error: failed to push some refs to 'https://github.com/
- 웹페이지
- 혼자 공부하는 파이썬
- django
- Java
- 한글 형태소 분석기
- Spring
- 회원 로그인
- 환경 변수 설정
- authenticate()
- Magazine K
- 배열
- 면접을 위한 CS 전공 지식 노트
- 암호화
- path variable
- django.contrib.auth
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함