如何将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
相关产品推荐
相关产品推荐

