Python Django重定向不';不能在基于类的视图中工作

Python Django重定向不';不能在基于类的视图中工作,python,django,python-3.x,django-views,Python,Django,Python 3.x,Django Views,我有一个基于类的视图,我正在检查一些条件并重定向到另一个页面,我在终端中看到该页面的GET请求,它返回200,但它没有重定向到该页面: class CheckoutFinalView(CartOrderMixin, View): def post(self, request, *args, **kwargs): cart_obj, new_obj = Cart.objects.new_or_get(request) order_obj = None if cart_obj

我有一个基于类的视图,我正在检查一些条件并重定向到另一个页面,我在终端中看到该页面的GET请求,它返回200,但它没有重定向到该页面:

class CheckoutFinalView(CartOrderMixin, View):
def post(self, request, *args, **kwargs):
    cart_obj, new_obj = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_obj.items.count() == 0:
        return redirect("carts:cart")
    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(request)
    has_card = False
    if billing_profile is not None:
        order_obj, order_obj_created = Order.objects.new_or_get(billing_profile, cart_obj)
        order_obj.save()
        has_card = billing_profile.has_card
    is_prepared = order_obj.check_done()
    user = User.objects.get(id=request.user.id)
    if is_prepared:
        print(is_prepared)
        did_charge, crg_msg = billing_profile.charge(order_obj)
        print(did_charge)
        if did_charge:
            order_obj.mark_paid()  # sort a signal for us
            request.session['cart_items'] = 0
            del request.session['cart_id']
            del request.session["order_id"]
            if not billing_profile.user:
                print("not billing profile user: ", billing_profile.user)
                billing_profile.set_cards_inactive()
            return redirect("checkout_final")
        else:
            print(crg_msg)
            return redirect("checkout_final")

def get(self, request, *args, **kwargs):
    return redirect("carts:success")
我也尝试了
返回HttpResponseRedirect(反向('carts:success'))
。但它也不起作用

我在终端中看到对该页面的GET请求,它返回200

这是非常正常的,您只需要为POST请求指定重定向,因为您覆盖了
def POST

因此,对于GET请求,您应该通过以下方式实现它:

class CheckoutFinalView(CartOrderMixin, View):

    def get(self, request, *args, **kwargs):
        return redirect('carts:success')

    def post(self, request, *args, **kwargs):
       return redirect('carts:success')
请注意,这个视图没有太大作用,它只是重定向。在这种情况下,您可以使用
重定向视图

from django.views.generic import RedirectView
from django.urls import reverse_lazy

class CheckoutFinalView(RedirectView):
    url = reverse_lazy('carts:success')
来自django.views.generic导入重定向视图的

从django.url导入反向链接
类CheckoutFinalView(重定向视图):
url=reverse\u lazy('carts:success')
我在终端中看到对该页面的GET请求,它返回200

这是非常正常的,您只需要为POST请求指定重定向,因为您覆盖了
def POST

因此,对于GET请求,您应该通过以下方式实现它:

class CheckoutFinalView(CartOrderMixin, View):

    def get(self, request, *args, **kwargs):
        return redirect('carts:success')

    def post(self, request, *args, **kwargs):
       return redirect('carts:success')
请注意,这个视图没有太大作用,它只是重定向。在这种情况下,您可以使用
重定向视图

from django.views.generic import RedirectView
from django.urls import reverse_lazy

class CheckoutFinalView(RedirectView):
    url = reverse_lazy('carts:success')
来自django.views.generic导入重定向视图的

从django.url导入反向链接
类CheckoutFinalView(重定向视图):

url=reverse\u lazy('carts:success')
此处仅重定向POST请求。此处仅重定向POST请求。