首页 > 解决方案 > Django:电子商务地址结帐表单未在终端中打印 Request.POST 数据

问题描述

我在视图中创建了一个带有 print(request.POST) 语句的 ModelForm。当我单击表单上的提交按钮时,我在终端中看不到任何数据或在管理员中看到保存的数据。此外,我被重定向到登录页面,天气未登录。有人可以解释我做错了什么吗?我应该如何考虑这种错误?

在此先感谢 SO 社区

表格.py

class AddressForm(forms.ModelForm):
class Meta:
    model = Address
    fields = [
        #'billing_profile',
        #'address_type',
        'address_line_1',
        'address_line_2',
        'city',
        'state',
        'country',
        'postal_code'
    ]

视图.py

from django.shortcuts import redirect
from django.utils.http import is_safe_url
from .forms import AddressForm

def checkout_address_create_view(request):
    form = AddressForm(request.POST or None)
    context = {
        "form": form
    }
    next_ = request.GET.get('next')
    next_post = request.POST.get('next')
    redirect_path = next_ or next_post or None
    if form.is_valid():
        print(request.POST)
        if is_safe_url(redirect_path, request.get_host()):
            return redirect(redirect_path)
        else:
            return redirect("cart:checkout")        
    return redirect("cart:checkout")   

form.html(地址)

<form method="POST" action='{% if action_url %}{{ action_url }}{% else %}{% url "login" %}{% endif %}'> {% csrf_token %}
  {% if next_url %}
    <input type='hidden' name='next' value='{{ next_url }}'/>
  {% endif %}
  {% if billing_profile %}
    <input type='hidden' name='billing_profile' value='{{ billing_profile }}'/>
  {% endif %}
  {% if address_type %}
    <input type='hidden' name='address_type' value='{{ address_type }}'/>
  {% endif %}
  {{ form.as_p }}
  <button type="submit" class="btn btn-primary my-2 btn-1">Submit</button>
</form>

form.html(帐户)

          <form method="POST"> <input type="hidden" name="csrfmiddlewaretoken" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx">
            <tr><th><label for="id_username">Username:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="username" class="form-control formiful" placeholder="Enter username" required id="id_username"></td></tr>
<tr><th><label for="id_password">Password:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="password" name="password" class="form-control formiful" placeholder="Enter password" required id="id_password"></td></tr>
            <button type="submit" class="btn btn-primary my-2">Log In</button>
</form>

结帐.html

{% if not billing_profile %}
    <div class='container containerful mt-3 text-center'>
        <div class='row py-1'>
            <div class='col-12 col-md-6 member'>
                <p class='lead'>Login</p>
                <div class='checkout-member'>
                    {% include 'accounts/snippets/form.html' with form=login_form next_url=request.build_absolute_uri %}
                </div>
            </div>
            <div class='col-12 col-md-6 guest'>
                <p class='lead'> Continue as guest</p>
                <div class='checkout-guest'>
                    {% url 'guest_register' as guest_register_url %}
                    {% include 'accounts/snippets/form.html' with form=guest_form next_url=request.build_absolute_uri action_url=guest_register_url %}
                </div>
            </div>
        </div>
    </div>

{% else %}
        {% if not object.shipping_address %}
            <div class='container containerful mt-3'>
                <div class='row py-1'>
                    <div class='col-md-6 mx-auto col-10'>
                    <p class='lead'>Shipping Address</p>
                    <hr/>
                    {% url 'checkout_address_create' as checkout_address_create %}
                    {% include 'addresses/form.html' with form=address_form next_url=request.build_absolute_uri action_url=checkout_address_create address_type='shipping' %}
                    </div>
                </div>
            </div>
        {% else %}
            <div class='container containerful mt-3'>
                <div class='row py-1'>
                    <div class='conveyor-belt text-center col-7 ms-5 me-4 my-2'>
                        <!--conveyor-->
                        {% include 'carts/contain/check_conveyor.html'%}
                    </div>
                    <div class='fillip-counter text-center col-3 ms-5 my-2 position-relative' >
                        <!--fillip-->
                        {% include 'carts/contain/check_fillip.html'%}
                    </div>
                </div>
            </div>
        {% endif %}
{% endif %}

网址.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login-page/', login_page, name='login'),
    path('register-page/guest/', guest_register_view, name='guest_register'),
    path('logout-page/', LogoutView.as_view(), name='logout'),
    path('cart/', include('carts.urls', namespace='cart')),
    re_path(r'^checkout/address/create/$', checkout_address_create_view, name='checkout_address_create_view'),    
    path('register-page/', register_page, name='register'),
    path('home/', anchor_page, name='home'),
    path('inventory/', include('inventory.urls')),
    path('featured/', include('inventory.featured-urls')),
    path('search/', include('search.urls',namespace='search')),
    path('whats-new-renu/', blog_RENU, name='blog'),
    path('about-renu/', about_RENU, name='about'),
    path('contact-renu/', contact_RENU, name='contact'),
]

标签: pythondjangoe-commerce

解决方案


我发现问题实际上出在我的 url.py 文件中,名称参数是“checkout_address_create_view”,而我的 action_url 的名称是 checkout_address_create 在我的 checkout.html {% if %} 语句中存在冲突。结帐.html

(以下更正)

{% if not billing_profile %}
    <div class='container containerful mt-3 text-center'>
        <div class='row py-1'>
            <div class='col-12 col-md-6 member'>
                <p class='lead'>Login</p>
                <div class='checkout-member'>
                    {% include 'accounts/snippets/form.html' with form=login_form next_url=request.build_absolute_uri %}
                </div>
            </div>
            <div class='col-12 col-md-6 guest'>
                <p class='lead'> Continue as guest</p>
                <div class='checkout-guest'>
                    {% url 'guest_register' as guest_register_url %}
                    {% include 'accounts/snippets/form.html' with form=guest_form next_url=request.build_absolute_uri action_url=guest_register_url %}
                </div>
            </div>
        </div>
    </div>

{% else %}
        {% if not object.shipping_address %}
            <div class='container containerful mt-3'>
                <div class='row py-1'>
                    <div class='col-md-6 mx-auto col-10'>
                    <p class='lead'>Shipping Address</p>
                    <hr/>
                    {% url 'checkout_address_create' as checkout_address_create %}
                    {% include 'addresses/form.html' with form=address_form next_url=request.build_absolute_uri action_url=checkout_address_create address_type='shipping' %}
                    </div>
                </div>
            </div>
        {% else %}
            <div class='container containerful mt-3'>
                <div class='row py-1'>
                    <div class='conveyor-belt text-center col-7 ms-5 me-4 my-2'>
                        <!--conveyor-->
                        {% include 'carts/contain/check_conveyor.html'%}
                    </div>
                    <div class='fillip-counter text-center col-3 ms-5 my-2 position-relative' >
                        <!--fillip-->
                        {% include 'carts/contain/check_fillip.html'%}
                    </div>
                </div>
            </div>
        {% endif %}
{% endif %}

网址.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login-page/', login_page, name='login'),
    path('register-page/guest/', guest_register_view, name='guest_register'),
    path('logout-page/', LogoutView.as_view(), name='logout'),
    path('cart/', include('carts.urls', namespace='cart')),
    re_path(r'^checkout/address/create/$', checkout_address_create_view, name='checkout_address_create'),    
    path('register-page/', register_page, name='register'),
    path('home/', anchor_page, name='home'),
    path('inventory/', include('inventory.urls')),
    path('featured/', include('inventory.featured-urls')),
    path('search/', include('search.urls',namespace='search')),
    path('whats-new-renu/', blog_RENU, name='blog'),
    path('about-renu/', about_RENU, name='about'),
    path('contact-renu/', contact_RENU, name='contact'),
]

推荐阅读