[Django1.5]two-scoops-django-best-practics 笔记四
来源:互联网 发布:js apply的z作用 编辑:程序博客网 时间:2024/06/05 04:08
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 examplefrom django.conf.urls import patterns, urlfrom django.views.generic import DetailViewfrom tastings.models import Tastingurlpatterns = 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.pyfrom django.views.generic import DetailViewfrom .models import Tastingclass TasteDetailView(DetailView): model = Tastingclass TasteResultsView(TasteDetailView): template_name = 'tastetests/results.html'
# tastings/urls.pyfrom django.conf.urls import patterns, urlfrom .views import TastingDetailView, TastingResultsViewurlpatterns = 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 TemplateViewclass FreshFruitMixin(object): def get_context_data(self, **kwargs): context = super(FreshFruitMixin, self).get_context_data(**kwargs) context["has_fresh_fruit"] = True return contextclass FruityFlavorView(FreshFruitMixin, TemplateView): template_name = "fruity_flavor.html"
那么CBV应该在什么样的任务场景呢?
django.views.generic?是什么??
声明:图片和代码均引用自 《two-scoops-django-best-practics》
- [Django1.5]two-scoops-django-best-practics 笔记四
- [Django1.5] two-scoops-django-best-practices 笔记一
- [Django1.5]two-scoops-django-best-practices 笔记二
- [Django1.5]two-scoops-django-best-practices 笔记三
- [Django1.5] two-scoops-django-best-practices 读书笔记
- [two scoops]为django admin后台添加模板(使用grappelli)
- Django1.7学习笔记(四)
- django1.5 官方文档阅读笔记(四)
- Django1.10文档学习笔记四
- django1.5学习笔记(1)
- Django学习笔记(四)
- Django 学习笔记(四)
- django1 pycharm创建django
- Django1.5:(二)创建第一个Django应用5
- OpenShift Python Django 部署(Python3.3 + Django1.5)
- Django1.5:(二)创建第一个Django应用1
- Django1.5:(二)创建第一个Django应用2
- Django1.5:(二)创建第一个Django应用3
- apache nginx 配置多端口监听,浏览器自动跳转到80端口
- 关于iOS系统中通讯录的访问
- 2440裸机程序——触摸屏测试程序
- android实用代码片段
- poj3286
- [Django1.5]two-scoops-django-best-practics 笔记四
- CSS渲染原理
- 数据库用控制器导入sql
- 黑马程序员_集合1(ArrayList,LinkedList,Vector,Iterator,ListIterator)
- 水晶报表
- C#中有关string.GetHashCode()的一个重要注意事项!
- 第十一周项目二一——派生类的应用2(派生类不可直接调用基类)
- su与sudo的区别
- VI使用技巧总结