본문 바로가기

PYTHON-BACK

# 24.10.18_ 마켓컬리 클론코딩2_적립금

728x90

http://127.0.0.1:8000/users/profile/display/

 

오늘 작업한 부분은 위 사진 가운데 부분 적립금과 캐시 추가 삭제 부분이다.

  • 마켓컬리 홈페이지에서 개인페이지를 보니 적립금과 컬리 캐쉬 부분이 보였다.
  • 이에 해당하는 부분을 추가하기로 하고 개발에 들어갔다.

처음 한 일은

        <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원 이하로 내려갈 수 없습니다.')를 사용해 동일하게 처리한다.

http://127.0.0.1:8000/users/update-mileage/
http://127.0.0.1:8000/users/delete-mileage/

 

이렇게 칼리 캐시 및 적립금 추가는 완료되었고, 나중에는 물건을 구매했을 때 해당 물건의 금액의 1~5% 금액을 적립금으로 추가해서 적립금이 올라가고, 물건 구입시에 적립금 및 칼리 캐시를 사용할 수 있게 구현해보고 싶다. (팀원들이랑 의견 나눠봐야 할듯)

 

다음 개발은 

http://127.0.0.1:8000/users/login/

 

로그인  부분에서 아이디 찾기 / 비밀번호 찾기 부분에 

 

GMail SMTP를 사용해서  메일을 활용해 아이디를 찾고, 비밀번호 찾기 폼을 메일로 보내서 그 폼에서 비밀번호 변경을 통해 아이디와 비밀번호를 찾는 것을 구현해 볼 예정이다.

728x90