51.Django(장고) - ecommerce 프로젝트 - 쇼핑몰 - 결재정보(배송정보) 처리

JungSik Heo·2024년 12월 11일

1.payment\forms.py

from django import forms
from payment.models import ShippingAddress
class ShippingForm(forms.ModelForm):
    
    class Meta:
        model = ShippingAddress
        fields = "__all__"
        exclude = ['user']

2.payment\urls.py

from django.urls import path
from . import views

#dev_42
app_name = 'payment'

#dev_41 url 추가
# Create your views here.
urlpatterns = [
    path("payment_update_info/", views.payment_update_info, name="payment_update_info"), #dev_42 추가
    path("payment_success/", views.payment_success, name="payment_success"),
]

3.payment\views.py

#dev_42
def payment_update_info(request):

    if request.user.is_authenticated:
        
        #Get Current uer's shipping Info
        shipping_user = ShippingAddress.objects.get(id=request.user.id)

        #Get User's Shipping Form
        form = ShippingForm(request.POST or None, instance=shipping_user)
            
        if form.is_valid():
            form.save()
            #Save shipping form
            form.save()

            messages.success(request, "결재정보가 업데이트 되었습니다!!")
            return redirect('/')
                
        return render(request, "payment/payment_update_info.html",{'form':form})
    else:
         messages.success(request, "You Must be logged In To Access That Page!!")
         return redirect('/login')

4.payment\views.py

{% extends 'layout/base.html' %}
{% load static %}
{% comment %} #dev_42 {% endcomment %}
{% block content %}

  {% include 'store/head.html' %}
  <div class="d-flex flex-column vh-100 justify-content-between">

    <!-- 네비게이션바 -->
    {% include "layout/navbar.html" %}

    <header class="bg-dark py-5">
      <div class="container px-4 px-lg-5 my-5">
        <div class="text-center text-white">
          <h1 class="display-4 fw-bolder">배송지 정보 업데이트</h1>
          <p class="lead fw-normal text-white-50 mb-0">Update payment Info..</p>
        </div>
      </div>
    </header>

    <br/>

    <div class="container my-5">
      <h1 class="text-center"><strong>배송 정보</strong></h1>
      <br>
      <br>
      <form method="post" action="{% url 'payment:payment_update_info' %}">
        {% csrf_token %}
        {% include "layout/form_errors.html" %}
        <div class="mb-3">
          <label for="username">이름</label>
          <input type="text" class="form-control" name="full_name" id="full_name" value="{{ form.full_name.value | default_if_none:'' }}"/>
        </div>
        <div class="mb-3">
          <label for="password1">전화번호</label>
          <input type="text" class="form-control" name="phone" id="phone" value="{{ form.phone.value|default_if_none:'' }}"/>
        </div>
        <div class="mb-3">
            <label for="password1">이메일</label>
            <input type="text" class="form-control" name="email" id="email" value="{{ form.email.value|default_if_none:'' }}"/>
          </div>
        <div class="mb-3">
          <label for="password1">주소1</label>
          <input type="text" class="form-control" name="address1" id="address1" value="{{ form.address1.value|default_if_none:''}}"/>
        </div>
        <div class="mb-3">
          <label for="password1">주소2</label>
          <input type="text" class="form-control" name="address2" id="address2" value="{{ form.address2.value|default_if_none:''}}"/>
        </div>
        <div class="mb-3">
          <label for="password1">도시</label>
          <input type="text" class="form-control" name="city" id="city" value="{{ form.city.value|default_if_none:'' }}"/>
        </div>
        <div class="mb-3">
          <label for="state">군/구</label>
          <input type="text" class="form-control" name="state" id="state" value="{{ form.state.value|default_if_none:'' }}"/>
        </div>
        <div class="mb-3">
          <label for="password1">ZipCode</label>
          <input type="text" class="form-control" name="zipcode" id="zipcode" value="{{ form.zipcode.value|default_if_none:'' }}"/>
        </div>
        <div class="mb-3">
          <label for="country">Contry</label>
          <input type="text" class="form-control" name="country" id="country" value="{{ form.country.value|default_if_none:'' }}"/>
        </div>
        <br>
        <br>
        <button type="submit" class="btn btn-primary">업데이트</button>
      </form>

    </div>

    <!-- Footer-->
    {% include 'store/footer.html' %}
  </div>
{%endblock content%}

아래와 같이 배송정보가 업데이트가 잘 되는지 확인

profile
쿵스보이(얼짱뮤지션)

0개의 댓글