近来在看two-scoops-django 1.5,也就随手翻译了第七章:
Function and Class-Based Views
Django 1.5中基于函数的是视图(FBVs)和基于类的视图(CBVs)。我们建议您了解如何使用这两种类型的视图。
Tip:FBV 是不被反对的
之前关于这个版本注释的措辞和发布在博客上不正确的信息有些许困惑。先在此澄清:
1.在Django 1.5中基于函数的视图依然被支持。在Django中没有去掉函数视图的计划。函数视图依旧被大量使用。
2.如direct_to_template和object_list这些基于函数的视图在Django 1.3和1.5中被删除
什么时候使用FBs 或 CBVs
当你实现一个视图中,考虑实现FBV或CBV中的哪一个。一些视图最好的实现是CBVs,而其他的是最好的实现是FBVs。
如果你不确定选择哪种方法,在下一页中我们准备的流程图可能对你有帮助。流程图 循我们的偏爱使用CBVs超过FBVs。
对于大多数视图我们宁可使用CBVs,使用FBVs来实现复杂的视图,CBVs实现将是一个痛苦的过程。
Tip:可选方法-学习使用FBVs
一些开发人员对大多数视图更喜欢使用FBVs和而使用CBVs视图需要派生子类。这个策略也是好的。
使视图逻辑与URLConf分离
通过URLConfs映射到视图,通常在一个命名为urls.py模块中。每个Django URL的设计理念(https://docs.djangoproject.com/en/1.5/misc/designphilosophies/url-design),
是url与视图的松耦合,允许适度宽松,鼓励最佳实践。
Django的提供极其简单的方法定义URL路径。像其他一切事物一样,我们提出在这本书中,简单是一种荣誉和尊重。
经验法则是显而易见的:
1.视图模块需要包涵视图逻辑
2.URL模块需要包涵URL逻辑
code如下所示:
# Similar to the Polls example
from django.conf.urls import patterns, url
from django.views.generic import DetailView
from tastings.models import Tasting
urlpatterns = patterns('',
url(r'^(?P<pk>\d+)/$',
DetailView.as_view(
model=Tasting,
template_name='tastings/detail.html'),
name='detail'),
url(r'^(?P<pk>\d+)/results/$',
DetailView.as_view(
model=Tasting,
template_name='tastings/results.html'),
name='results'),
)
乍一看这段代码似乎不错,但我们认为它违反了Django设计哲学;
后续翻译会跟上