Python Django重定向不';不能在基于类的视图中工作
我有一个基于类的视图,我正在检查一些条件并重定向到另一个页面,我在终端中看到该页面的GET请求,它返回200,但它没有重定向到该页面: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
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请求。