Django: 路由与视图 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

从函数到类

Django中的视图就是一个标准的Python函数,输入请求对象,返回响应对象,仅此 而已。

考虑到在Python中的可调用对象,一个很自然的想法是,用来实现视图:

class EzView(object):
    def __call__(self,req):
        return HttpResponse('Hello,I am an object!')       
urlpatterns = [
    url(r'^$',EzView()),
]

很简单。但这有什么用呢?

答案基本上都可以归结到面向对象/OO思维所带来的好处,具体说来:

  1. 让代码看起来更优雅
  2. 更容易实现代码复用

下面的示例分别使用函数和类来实现一个支持多种HTTP方法的视图,体会 一下代码的组织结构的不同:

func-vs-class

对于大多数人而言,右边的代码的确看起来更优雅,一坨坨的条件判断 现在被归拢到类的不同方法中去了。

当然,使用类来实现视图,在Django框架中并不是必需品,对于习惯于 过程思维的开发者,也许左边的代码更契合心意。无论如何,请记住, 是Django开发团队选择了OO方法来实现代码级的复用,而不是必需 使用来实现优雅与代码复用。

仿照示例中的视图类EzView,实现一个视图类ReportView,当用户访问 /report/123/时,能够显示Hi, this is report 123!