728x90
오늘 작업한 부분은 위 사진 가운데 부분 적립금과 캐시 추가 삭제 부분이다.
- 마켓컬리 홈페이지에서 개인페이지를 보니 적립금과 컬리 캐쉬 부분이 보였다.
- 이에 해당하는 부분을 추가하기로 하고 개발에 들어갔다.
처음 한 일은
<div class="mileage-section"> <h4>반가워요! {{ user.username }}님</h4> <p>최초 1회 무료배송</p> <div class="mileage-details"> <div class="mileage"> <p>적립금</p> <span> {{ user.mileage|floatformat:0 }}원 </span> </div> <div class="karly-cash"> <p>칼리캐시</p> <span> {{ user.karly_cash|floatformat:0 }}원 </span> </div> </div> <div class="update-buttons"> <a href="{% url 'update_mileage' %}" class="update-miles-button add-miles-button">적립금/캐시 추가</a> <a href="{% url 'delete_mileage' %}" class="update-miles-button delete-miles-button">적립금/캐시 삭제</a> </div> </div> |
위와 같이 가운데 폼을 만들기 위해 기존에 있던 profile_display.html에 해당 내용을 추가한 것이다.
이후 urls.py 부분에
path('update-mileage/', views.update_mileage, name='update_mileage'), path('delete-mileage/', views.delete_mileage, name='delete_mileage'), |
패스를 추가해서 마일리지 관련 항목돌이 추가 되거나 삭제되도록 유도 하였다.
이후에는 view.py 작업을 진행했는데
# 마일리지(적립금, 컬리캐쉬) 추가 뷰 @login_required def update_mileage(request): if request.method == 'POST': mileage = int(request.POST.get('mileage', 0)) karly_cash = int(request.POST.get('karly_cash', 0)) user = request.user user.mileage += mileage # 기존 적립금에 추가 user.karly_cash += karly_cash # 기존 칼리캐시에 추가 user.save() # 변경사항 저장 messages.success(request, '적립금 및 컬리캐시가 성공적으로 업데이트되었습니다.') return redirect('http://127.0.0.1:8000/users/profile/display/') # 업데이트 후 프로필 페이지로 리디렉션 return render(request, 'users/update_mileage.html') # 마일리지(적립금, 컬리캐쉬 관련) 삭제 뷰 @login_required def delete_mileage(request): if request.method == 'POST': # 폼에서 삭제할 금액 입력받기 mileage_to_delete = int(request.POST.get('mileage', 0)) karly_cash_to_delete = int(request.POST.get('karly_cash', 0)) # 현재 사용자 정보 가져오기 user = request.user # 적립금 삭제 로직 if mileage_to_delete <= user.mileage: user.mileage -= mileage_to_delete else: messages.error(request, '적립금은 0원 이하로 내려갈 수 없습니다.') return redirect('delete_mileage') # 다시 삭제 페이지로 리다이렉트 # 컬리캐시 삭제 로직 if karly_cash_to_delete <= user.karly_cash: user.karly_cash -= karly_cash_to_delete else: messages.error(request, '컬리캐시는 0원 이하로 내려갈 수 없습니다.') return redirect('delete_mileage') # 다시 삭제 페이지로 리다이렉트 user.save() messages.success(request, '적립금 및 컬리캐시가 성공적으로 업데이트되었습니다.') return redirect('http://127.0.0.1:8000/users/profile/display/') # 적절한 리다이렉트 경로로 변경 return render(request, 'users/delete_mileage.html') # 삭제 페이지 템플릿 |
마일리지 추가락 삭제 view 작업을 진행했다.
내용을 살펴보면 다음과 같다
update_mileage(request) - 사용자가 자신의 적립금과 컬리캐시를 추가할 수 있게 해주는 기능
- @login_required : 이 데코레이션은 사용자가 로그인 해야만 이 뷰에 접근할 수 있게 하는 것이다.
- request.method == 'POST' : POST 요청 일때만 적립금과 컬리 캐쉬를 업데이트 하고, 사용자가 폼을 제출했을때 처리 되는 부분이다.
- int(request.POST.get('mileage', 0)): 폼에서 제출된 마일리지(적립금) 값을 가져오는 것이고, 입력되어 있지 않은 경우는 기본값을 0으로 설정한다.
- int(request.POST.get('karly_cash', 0)): 이 역시 마찬가지 이지만 이부분은 컬리 캐쉬 부분에 해당한다.
- user = request.user: 를 통해 현재 요청을 보낸 사용자의 정보를 가져오고
- user.mileage += mileage, user.karly_cash += karly_cash: 을 통해 입력된 적립금, 컬리 캐쉬를 기존 내역에 더해준다.
- user.save(): 를 통해 변경된 사용자의 적립금과 컬리캐시 정보를 DB에 저장하고
- return redirect('http://127.0.0.1:8000/users/profile/display/'): 를 통해 업데이트가 완료되면 기존 사용자 프로필 페이지로 리다이렉트 시킨다.
- delete_mileage(request) - 사용자가 자신의 적립금과 컬리캐시를 삭제(차감)할 수 있도록 처리
- 위 내용에서 적립이 추가가 아닌 삭제 로직을 구현한 것인 만큼 대부분 비슷하지만, 다른 부분을 살펴보면
- if mileage_to_delete <= user.mileage: 를 통해 삭제할 적립금이 사용자의 현재 적립금보다 크지 않을 경우에만 차감한다 (이 로직을 사용하지 않았더니 - 적립금이 나오는 것을 확인해 추가함)
- 만약 현재 적립금보다 큰 금액을 삭제하려고 하면 messages.error(request, '적립금은 0원 이하로 내려갈 수 없습니다.') 로 오류메시지 표시하고, 삭제 페이지로 다시 리다이렉트 시킨다.
- 컬리 캐쉬 역시 if karly_cash_to_delete <= user.karly_cash: 와 messages.error(request, '컬리캐시는 0원 이하로 내려갈 수 없습니다.')를 사용해 동일하게 처리한다.
이렇게 칼리 캐시 및 적립금 추가는 완료되었고, 나중에는 물건을 구매했을 때 해당 물건의 금액의 1~5% 금액을 적립금으로 추가해서 적립금이 올라가고, 물건 구입시에 적립금 및 칼리 캐시를 사용할 수 있게 구현해보고 싶다. (팀원들이랑 의견 나눠봐야 할듯)
다음 개발은
로그인 부분에서 아이디 찾기 / 비밀번호 찾기 부분에
GMail SMTP를 사용해서 메일을 활용해 아이디를 찾고, 비밀번호 찾기 폼을 메일로 보내서 그 폼에서 비밀번호 변경을 통해 아이디와 비밀번호를 찾는 것을 구현해 볼 예정이다.
728x90
'PYTHON-BACK' 카테고리의 다른 글
# 24.10.22_ 마켓컬리 클론코딩4_선물특가 타이머 (0) | 2024.10.22 |
---|---|
# 24.10.21_ 마켓컬리 클론코딩3_Google SMTP (1) | 2024.10.21 |
# 24.10.17_ 마켓컬리 클론코딩_회원정보 수정 (1) | 2024.10.17 |
#파이썬 24.09.25_AWS CloudFront 실습3+클라우드 서버 내 Docker & Kubernates (6) | 2024.09.27 |
#파이썬 24.09.25_AWS CloudFront 실습2 (0) | 2024.09.26 |