Django项目开发实战
上QQ阅读APP看书,第一时间看更新

4.3 视图类

前面我们介绍了视图函数,视图函数可调用,它接受请求并返回响应。在Django中,视图也可以用类来表示,这些类称为视图类。使用视图类有利于代码的重用,可提高开发的效率。同时Django提供了一些自带的视图类,可以为自定义的视图类做一个参考。

4.3.1 基本用法

视图类最简单的用法是直接在URLconf中直接使用常用的类。例如,下面的例子使用框架自带的TemplateView,调用as_view( )方法,并传入自定义的模板文件:

为了适应更多变的需求,可以继承现有视图,并覆盖属性来实现业务逻辑。示例代码如下:

    from django.views.generic import TemplateView
    class AboutView(TemplateView):  # 继承模板视图类
         template_name = "about.html"  # 自定义的模板文件

相应地,URLconf也要做修改,将之前的TemplateView替换成上面自定义的AboutView,同样需要调用as_view( )方法。示例代码如下:

4.3.2 视图类的优点

相比于视图函数,视图类有一些优点:

  • 有利于代码重用。开发者编写自己的视图时,可以通过继承已有的视图类来复用基类的代码。
  • 有利于提升代码的可扩展性。基于Mixin来扩展,新的视图类包含更多的功能。
  • 代码结构更清晰。视图类可以使用不同的方法响应不同的HTTP请求,而使用视图函数需要做条件判断。

as_view( )方法会调用dispatch( )方法,代码摘录如下:

Mixin是一种特殊的继承类。在面向对象编程语言中,它是一个包含其他类使用方法的类,而不必是其他类的父类。Mixin鼓励代码重用,可用于避免多继承可能导致的继承歧义。在视图类中应用Mixin的示例代码如下:

这个例子是极其简单的,现实场景的业务逻辑会比这个复杂得多。现在可以在视图类中使用Mixin了,示例代码如下:

如果希望在代码的不同类之间重用某些代码,那么Mixin会是一个非常好的选择。