从函数到类
Django中的视图就是一个标准的Python函数,输入请求对象,返回响应对象,仅此 而已。
考虑到在Python中的可调用对象,一个很自然的想法是,用类来实现视图:
class EzView(object):
def __call__(self,req):
return HttpResponse('Hello,I am an object!')
urlpatterns = [
url(r'^$',EzView()),
]
很简单。但这有什么用呢?
答案基本上都可以归结到面向对象/OO思维所带来的好处,具体说来:
- 让代码看起来更优雅
- 更容易实现代码复用
下面的示例分别使用函数和类来实现一个支持多种HTTP方法的视图,体会 一下代码的组织结构的不同:
对于大多数人而言,右边的代码的确看起来更优雅,一坨坨的条件判断 现在被归拢到类的不同方法中去了。
当然,使用类来实现视图,在Django框架中并不是必需品,对于习惯于 过程思维的开发者,也许左边的代码更契合心意。无论如何,请记住, 是Django开发团队选择了OO方法来实现代码级的复用,而不是必需 使用类来实现优雅与代码复用。
仿照示例中的视图类EzView,实现一个视图类ReportView,当用户访问
/report/123/时,能够显示Hi, this is report 123!