You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Django投票应用的vote函数视图改写为类视图

Django投票应用vote函数视图转类视图方案

1. 替换views.py中的vote函数为类视图

将原来的vote函数删除,新增如下VoteView类:

from django.views import generic
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from .models import Choice, Question

class VoteView(generic.View):
    def post(self, request, slug):
        question = get_object_or_404(Question, slug=slug)
        try:
             selected_choice = question.choice_set.get(pk=request.POST['choice'])
        except (KeyError, Choice.DoesNotExist):
            return render(request, 'polls/detail.html', {
                'question': question,
                'error_message': "Nie wybrałeś żadnej opcji.",
            })
        selected_choice.votes += 1
        selected_choice.save()
        return HttpResponseRedirect(reverse('polls:results', args=(question.slug,)))

2. 修改urls.py路由配置

将polls/urls.py中对应vote的路由条目修改为调用类视图的as_view()方法:

urlpatterns = [
    # 其他原有路由保持不变
    path('<slug:slug>/glosowanie', views.VoteView.as_view(), name='vote'),
]

兼容说明

原有模板、模型代码无需任何修改,类视图逻辑和原函数视图完全一致,可直接正常运行。

内容的提问来源于stack exchange,提问作者damianmalec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:06:03