上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会是一个非常好的选择。