Django搭建个人博客:基于类的视图

本文介绍了Django中基于类的视图,包括类视图的优势、列表视图、通用视图、动态过滤、添加上下文、混入类以及详情页的实现。通过实例展示了如何使用类视图简化代码,提高代码复用性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说是完结,马上又开始写进阶篇了。

本章不会为博客项目增加新功能,但是也同样重要,因为我们要学习高逼格的基于的视图。

什么是类视图

前面章节中写的所有视图都是基于函数的,即def;而类视图是基于类的,即class

有编程基础的同学都知道,是面向对象技术中非常重要的概念。具有复杂数据功能的类,可以通过继承轻而易举的将自身特性传递给另一个类,从而实现代码的高效复用。

相比以前的函数视图,类视图有以下优势:

  • HTTP方法(GETPOST等)相关的代码,可以通过方法而不是条件分支来组织
  • 可以通过诸如mixins(多重继承)之类的面向对象技术将代码分解为可重用组件

说的都是什么意思?通过例子来感受一下。

列表

函数和类

假设我们有一个博客列表,列表既有GET方法、又有POST方法,那么用视图函数看起来像这样:

views.py

def article_list_example(request):
    """处理GET请求"""
    if request.method == 'GET':
        articles = ArticlePost.objects.all()
        context = {
   
   'articles': articles}
        return render(request, 'article/list.html', context)

而在类视图中,则变为这样:

views.py

from django.views import View

class ArticleListView(View):
    """处理GET请求"""
    def get(self, request):
        articles = ArticlePost.objects.all()
        context = {
   
   'articles': articles}
        return render(request, 'article/list.html', context)

从本质上讲,基于类的视图允许你使用不同的类实例方法(即上面的def get())响应不同的HTTP请求方法,而不需要使用条件分支代码。这样做的好处是把不同的HTTP请求都分离到独立的函数中,逻辑更加清晰,并且方便复用。

需要注意的是,因为Django的URL解析器希望将请求发送到函数而不是类,所以类视图有一个 as_view()方法,该方法返回一个函数,当请求匹配关联模式的URL时,则调用该函数。

即,视图函数的url原本写为:

urls.py

...
urlpatterns = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值