Fork me on GitHub
Django实战

django

 

Django的第一印象

 

        Django (/ˈdʒæŋgoː/) 是用python语言写的开源web开发框架(open source web framework),鼓励快速开发,并遵循MTV设计模式。其主要目的是简便、快速的开发数据库驱动的网站。

        Django遵守 BSD版权,目前最新的稳定版(stable)是2011年9月发布的v1.3.1。

        Django 的名称来源于比利时的爵士音乐家Django Reinhardt,他是一个吉普赛人,主要演奏吉它。

 

        与rails一样,Django强调 松耦合少写代码快速开发DRY一致性等原则。但Django与rails在设计哲学上最大的不同在于,Django强调“显示说明优于隐含意义”,这一点来自于Python的核心原则。

       这一设计哲学的不同使得Django与rails有很大的不同:Django不喜欢“魔术代码”。尽管魔术代码看起来很酷,但是存在着如下问题:

       1)语法晦涩难懂,除了编程语言外,你还需要了解一门自定义的DSL
       2)相对于编程语言,DSL更加不稳定,可能会经常变化
       3)如果你想理解其实现方式,需要花费比较大的精力
       4)魔术代码可以很容易地实现某些特定的功能,但是如果你想在此基础上做一些改变,就会变得非常困难
所以,Django不喜欢“魔术代码”,而是强调代码的可理解、可控制

      比如《Agile Web Development with Rails》中开篇用来吸引人的那个例子,一个关于项目的Model类:

 

 

       看上去很神奇对吗?但是你马上就会提出几个问题:

       1)除了关联关系外,对象自身的属性在哪里定义?

       2)non_discolosure_agreement是什么属性?

       3)validates_xxx 之类的语法到底有多少种?

       ...

      本文并不是以介绍rails为主,所以上述问题在这里不作回答。但是为了与Django的Model对比,还需要补全rails 模型的另外一个部分:migration。事实上,在rails中,上面的Model还需要一个db migrate 类一起才能工作:

 


       Django的设计是 以Python类的形式定义数据模型,通过ORM与数据库联系起来。同时约定为了避免“猜谜游戏”,不应该仅仅依赖字段的命名来预示其可能的行为,而是通过关键的参数来定义操作。

 

       上述Model类在Django中以如下简单明了的方式来实现:


Django的代码清楚明白,每一条语句都很明确。这就是Django的风格。(顺便说一句,Django的灵活性不以牺牲外键关联为代价,而rails的数据库中不支持外键关系)

 
 
posted @ 2012-02-19 23:02 Holbrook 阅读(15) | 评论 (0) 编辑
 
 
摘要: 上一节我们实现了一个”能看不能用“的购物车,现在我们来使用这个购物车。首先是产品目录界面中的”加入购物车“链接,我们希望点击这个按钮后,在购物车中添加该产品(添加的规则是如果购物车中已经有该产品就增加...阅读全文
posted @ 2012-02-19 22:58 Holbrook 阅读(11) | 评论 (0) 编辑
 
摘要: 现在,我们有了一个产品目录界面,用户如果看到满意的产品,就可以将其放入购物车。下面就让我们来实现购物车的功能。首先要做一下简单的分析和设计。购物车应该显示一系列产品的清单,其中列出了买方选中的产品。...阅读全文
posted @ 2012-02-19 22:53 Holbrook 阅读(16) | 评论 (0) 编辑
 
摘要: 针对上一节的新需求,界面设计师还为我们设计了一个新的界面,不仅仅是目录页,还包含了站点的整体风格,如下图:感谢界面设计师为我们提供的“又黑又硬”的工具条,这个看起来真的很酷。下面,让我们来享用她的工作...阅读全文
posted @ 2012-02-19 22:48 Holbrook 阅读(17) | 评论 (0) 编辑
 
摘要: 我们已经实现了卖方的产品维护界面,根据最初的需求,还要为买方实现一个目录页:买方通过这个界面浏览产品并可以加入购物车。通过进一步需求调研,了解到产品有一个“上架时间”,在这个时间之后的产品才能被买方看...阅读全文
posted @ 2012-02-19 22:44 Holbrook 阅读(13) | 评论 (0) 编辑
 
摘要: 尽早进行单元测试(UnitTest)是比较好的做法,极端的情况甚至强调“测试先行”。现在我们已经有了第一个model类和Form类,是时候开始写测试代码了。Django支持python的单元测试(un...阅读全文
posted @ 2012-02-19 22:42 Holbrook 阅读(12) | 评论 (0) 编辑
 
摘要: 让我们完成上一节中的任务:1.验证price>0:需要在Form中验证; 2. 验证title唯一:在Model中验证; 3. 验证image_url的扩展名:在Form中验证,还可以顺便在Model...阅读全文
posted @ 2012-02-19 22:39 Holbrook 阅读(14) | 评论 (0) 编辑
 
摘要: rails有一个”简洁、完美的验证机制,无比强大的表达式和验证框架“。在《Agile Web Development with Rails 4th》一书的7.1节向我们展示了如何验证Product:c...阅读全文
posted @ 2012-02-19 22:33 Holbrook 阅读(30) | 评论 (0) 编辑
 
 
 
 
 
 
 
摘要: 内容提要 1. 回顾Django的视图函数(view function) 2. 在视图函数中使用模板 3. 简化视图函数的两个工具 4. 使用通用视图函数 5. Django提供的通用视图阅读全文
posted @ 2012-02-12 00:57 Holbrook 阅读(56) | 评论 (0) 编辑
 
 
posted @ 2012-02-10 16:58 Holbrook 阅读(32) | 评论 (0) 编辑
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2012-01-29 18:31 Holbrook 阅读(30) | 评论 (0) 编辑
 
 
posted @ 2012-01-29 15:29 Holbrook 阅读(14) | 评论 (0) 编辑
 
 
posted @ 2012-01-29 14:39 Holbrook 阅读(28) | 评论 (0) 编辑

 

posted on 2012-02-23 23:01  HackerVirus  阅读(423)  评论(0编辑  收藏  举报