Django CBV与FBV互转求助:含Paystack支付的视图转换问题
FBV 转 CBV(Paystack 租车详情视图)
from django.views.generic import DetailView from django.contrib import messages from django.conf import settings from .models import CarRent # 导入你项目中自定义的PaystackAccount类 class CarRentDetailView(DetailView): model = CarRent template_name = 'app/CarRent_detail.html' context_object_name = 'object' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # 初始化Paystack配置 paystack = PaystackAccount( settings.PAYSTACK_EMAIL, settings.PAYSTACK_PUBLIC_KEY, self.object.total_cost ) # 注入原FBV中的额外上下文参数 context.update({ 'pk_public': settings.PAYSTACK_PUBLIC_KEY, 'currency': 'NGN', 'paystack': paystack }) return context def post(self, request, *args, **kwargs): self.object = self.get_object() paystack = PaystackAccount( settings.PAYSTACK_EMAIL, settings.PAYSTACK_PUBLIC_KEY, self.object.total_cost ) # 原有支付验证逻辑保持不变 if paystack.verify_transaction(request.POST['reference']): messages.success(request, "payment successfull") … car_rented.save() … rent_activation.save() messages.success(request, "Rent successfully updated") context = self.get_context_data(**kwargs) return self.render_to_response(context)
CBV 转 FBV(选手投票详情视图)
from django.shortcuts import get_object_or_404, render, redirect from django.contrib import messages from django.urls import reverse from .models import Contestant from .forms import VoteForm def contestant_detail(request, pk): # 获取当前选手对象 contestant = get_object_or_404(Contestant, pk=pk) # 处理表单提交请求 if request.method == 'POST': form = VoteForm(request.POST) if form.is_valid(): # 原有业务逻辑保持不变 … contestant.save() messages.success(request, f'You have successfully casted {vote_count} vote.') # 提交成功后重定向到原详情页 return redirect(reverse('contest:contestant-detail', kwargs={'pk': pk})) # 处理普通GET请求 else: form = VoteForm() # 组装对应上下文参数 context = { 'contestants': contestant, 'vote_contestant': contestant, 'form': form } return render(request, 'contest/contestant_detail.html', context)
内容的提问来源于stack exchange,提问作者Abdul Giwa
相关产品推荐
相关产品推荐

