Просмотр ecommerceapp.views.CheckoutView не вернул объект HttpResponse. Вместо этого он вернул None

#django

#django

Вопрос:

Я пытаюсь исправить эту проблему в отношении HttpResponse, но я не могу найти, в чем именно проблема. Это делается путем создания магазина электронной коммерции, и я хочу проверить, что все данные формы проверены, прежде чем продолжить. Но всякий раз, когда я пытаюсь выполнить этот код, появляется ошибка, и я все еще не могу понять, почему. Я попытался удалить некоторые вещи, но это все то же самое. Любая помощь, которую я был бы очень признателен!

views.py:

 def is_valid_form(values):
    valid = True
    for field in values:
        if field == '':
            valid = False
    return valid

class CheckoutView(View):
    def get(self, *args, **kwargs):
        try:
            order = Order.objects.get(user=self.request.user, ordered=False)
            form = checkoutForm()
            context = {
                'form': form,
                'order': order,
            }

            shipping_address_qs = Address.objects.filter(
                user=self.request.user,
                address_type='S',
                default=True
            )
            if shipping_address_qs.exists():
                context.update(
                    {'default_shipping_address': shipping_address_qs[0]})

        except ObjectDoesNotExist:
            messages.info(self.request, "You do not have an active order")
            return redirect("core:checkout")

    def post(self, *args, **kwargs):
        form = checkoutForm(self.request.POST or None)
        try:
            order = Order.objects.get(user=self.request.user, ordered=False)
            if form.is_valid():

                    use_default_shipping = form.cleaned_data.get(
                        'use_default_shipping')
                    if use_default_shipping:
                        print("Using the defualt shipping address")
                        address_qs = Address.objects.filter(
                            user=self.request.user,
                            address_type='S',
                            default=True
                        )
                        if address_qs.exists():
                            shipping_address = address_qs[0]
                            order.shipping_address = shipping_address
                            order.save()
                        else:
                            messages.info(
                                self.request, "No default shipping address available")
                            return redirect('core:checkout')
                    else:
                        print("User is entering a new shipping address")
                        street_address = form.cleaned_data.get(
                            'street_address')
                        appartment_suite = form.cleaned_data.get(
                            'appartment_suite')
                        town_city = form.cleaned_data.get(
                            'town_city')
                        post_code = form.cleaned_data.get('post_code')

                        if is_valid_form([street_address, town_city, post_code]):
                            shipping_address = Address(
                                user=self.request.user,
                                street_address=street_address,
                                appartment_suite=appartment_suite,
                                town_city=town_city,
                                post_code=post_code,
                            )
                            shipping_address.save()

                            order.shipping_address = shipping_address
                            order.save()

                            set_default_shipping = form.cleaned_data.get(
                                'set_default_shipping')
                            if set_default_shipping:
                                shipping_address.default = True
                                shipping_address.save()

                        else:
                            messages.info(
                                self.request, "Please fill in the required shipping address fields")

                    payment_option = form.cleaned_data.get('payment_option')

                    if payment_option == 'S':
                        return redirect('core:payment', payment_option='Stripe')
                    elif payment_option == 'P':
                        return redirect('core:payment', payment_option='Paypal')
                    else:
                        messages.warning(
                            self.request, "Invalid payment option selected")
                        return redirect('core:checkout')

        except ObjectDoesNotExist:
            messages.warning(self.request, "You do not have an active order")
            return redirect("core:shop")
 

forms.py:

 class checkoutForm(forms.Form):

    COUNTRY = (('France', 'France'),
                ('Italy', 'Italy'),
                ('Philippines', 'Philippines'),
                ('Hongkong', 'Hongkong'),
                ('Japan', 'Japan'))

    PAYMENT_CHOICES = (
    ('S', 'Stripe'),
    ('P', 'Paypal'),
    ('BT', 'Bank Transfer'),
    )

    first_name = forms.CharField(widget=forms.TextInput(attrs={
        'class': 'form-control',
    }))
    second_name = forms.CharField(widget=forms.TextInput(attrs={
        'class': 'form-control',
    }))
    state_country = CountryField().formfield(widget=CountrySelectWidget(
    attrs={'class': 'form-control',}
    ))
    street_address = forms.CharField(widget=forms.TextInput(attrs={
        'class': 'form-control',
    }))
    appartment_suite = forms.CharField(required=False, widget=forms.TextInput(attrs={
        'class': 'form-control',
        'placeholder': 'Appartment, suite, unit etc: (optional)'
    }))
    town_city = forms.CharField(widget=forms.TextInput(attrs={
        'class': 'form-control',
    }))
    post_code = forms.IntegerField(widget=forms.NumberInput(attrs={
        'class': 'form-control',
    }))
    phone_number = forms.IntegerField(widget=forms.NumberInput(attrs={
        'class': 'form-control',
    }))
    email_address = forms.EmailField(widget=forms.TextInput(attrs={
        'class': 'form-control',
    }))
    payment_option = forms.ChoiceField(choices=
    PAYMENT_CHOICES)

    set_default_shipping = forms.BooleanField(required=False)
    use_default_shipping = forms.BooleanField(required=False)
 

urls.py:

 urlpatterns = [
    path('', views.index, name='index'),
    path('shop/', views.shop, name="shop"),
    path('about/', views.about, name="about"),
    path('blog/', views.blog, name="blog"),
    path('contact/', views.contact, name="contact"),
    path('checkout/', CheckoutView.as_view(), name="checkout"),
    path('cart/', views.cart, name="cart"),
    path('product-single/<slug:slug>/', views.productpage, name="productpage"),
    path('add-to-cart/<slug:slug>/', views.add_to_cart, name="addtocart"),
    path('remove-from-cart/<slug:slug>/', views.remove_from_cart, name="removefromcart"),
    path('payment/<payment_option>/', PaymentView.as_view(), name='payment')
]
 

Спасибо за любую помощь, которую вы можете мне предоставить, поскольку это будет много значить для меня, и это также может помочь мне получить дополнительные знания.

Комментарии:

1. Если ваша форма недействительна, она ничего не вернет. Переместите final redirect() из предложения except .

2. В блоке try CheckoutView::get вы ничего не возвращаете. Могут быть другие места, когда ничего не возвращается