chapter 7
Function-and Class-Based ViewsDjango1.5 有这两种模式
function-based views FBVs
class-based views CBVs
什么时候使用FBVs或者CBVs?
*views模块应该包含view逻辑
*URL模块应该包含URL逻辑
而不是混为一谈
最好不要有这样的代码:
# 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'), )
这样的代码也可以使用,但是违法了松耦合,DRY原则,并且会使项目的可维护性大大降低。
Loose Coupling 松耦合的URLConfs案例:
# tastings/views.py from django.views.generic import DetailView from .models import Tasting class TasteDetailView(DetailView): model = Tasting class TasteResultsView(TasteDetailView): template_name = 'tastetests/results.html'
# tastings/urls.py from django.conf.urls import patterns, url from .views import TastingDetailView, TastingResultsView urlpatterns = patterns('', url( regex=r'^(?P<pk>\d+)/$', view=TastingDetailView.as_view(), name='detail' ), url( regex=r'^(?P<pk>\d+)/results/$', view=TastingResultsView.as_view(), name='results' ), )好处:DRY,松耦合原则等
这个还没有在实际项目中用过CBVs原则,需要研究下,FBVs做练习比较快,但是设计上还有缺陷。
chapter 8
CBVs最佳实践:Class Based Views从django1.3开始支持,可以提高view代码的重用性,使得代码更加有力和灵活。
在django1.5的文档中有专门的DBVs的说明。
CBVs指导原则:
*越少的view代码越好
*不要重复view中的代码
*Views应该处理表现层代码,业务逻辑应该交给Models或者Forms
*保持你的views简洁
*保持你的混合类使用更加简单
多态接口(Mixins): 不好翻译,没见过,直翻。。
混合类:
多继承中使用原则:
*Django自身提供的类应该在右边(多继承中父类排列方式)
*mixins应该在左边
*mixins应该继承python内置object类
ex:
from django.views.generic import TemplateView class FreshFruitMixin(object): def get_context_data(self, **kwargs): context = super(FreshFruitMixin, self).get_context_data(**kwargs) context["has_fresh_fruit"] = True return context class FruityFlavorView(FreshFruitMixin, TemplateView): template_name = "fruity_flavor.html"
那么CBV应该在什么样的任务场景呢?
django.views.generic?是什么??
声明:图片和代码均引用自 《two-scoops-django-best-practics》
作者:lzz957748332 发表于2013-5-10 23:34:12 原文链接
阅读:44 评论:0 查看评论