每日10行代码143:学习django-用通用视图改写代码

176 篇文章 4 订阅
17 篇文章 1 订阅

web程序常有的一个功能就是列表展示数据库里的数据,比如前面的章节里,展示所有问题,展示所有投票情况等;基于这种原因,django有自己的通用视图。
下面把投票应用转成通用视图,需要做以下几件事:

  1. 转换 URLconf。
  2. 删除一些旧的、不再需要的视图。
  3. 基于 Django 的通用视图引入新的视图。
    首先修改polls/urls.py文件:
urlpatterns = [
    # ex:/polls/
    path('', views.index, name='index'),
    # ex:/polls/5/
    path('<int:pk>/', views.detail, name='detail'),
    # ex:/polls/5/results/
    path('<int:pk>/results/', views.results, name='results'),
    # ex:/polls/5/vote/
    path('<int:question_id>/vote/', views.vote, name='vote')
]

注意,第二个和第三个匹配准则中,路径字符串中匹配模式的名称已经由 <question_id> 改为 <pk>
其次修改视图:

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

from .models import Choice, Question


class IndexView(generic.ListView):
    template_name = 'polls/index.html'
    context_object_name = 'latest_question_list'

    def get_queryset(self):
        """Return the last five published questions."""
        return Question.objects.order_by('-pub_date')[:5]


class DetailView(generic.DetailView):
    model = Question
    template_name = 'polls/detail.html'


class ResultsView(generic.DetailView):
    model = Question
    template_name = 'polls/results.html'


def vote(request, question_id):
    ... # same as above, no changes needed.

至此,就把django由自定义视图换成了通用视图,至于这样做到底有哪些好处,我还不完全清楚,但至少让代码变得更加简洁明了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值