摘要: Django的Model使用ORM来操作数据库,通常我们只需关注Model类本身,Django自己会处理到数据库的映射。但凡事总有例外,有时需要改变默认的映射行为。Django对此也提供了丰富的支持。1. 自定义字段名 默认的字段名与属性名相同,可以通过字段的db_column属性自定义,如 where = models.CharField(max_length=400, db_column='place')2. 自定义索引除了ID字段,其他字段默认不建立索引,可以通过字段的db_index属性自定义,如 publish_date= models.DateField(db_in 阅读全文
posted @ 2012-02-14 01:00 心内求法 阅读(5428) 评论(0) 推荐(0) 编辑
摘要: Django的Admin提供了强大的功能,很多人可能会基于Admin开发自己的应用。在Admin默认的管理界面中,Model类的显示名称可以通过国际化的方法来改变,其实app的名称也可以自己指定,你甚至可将同一个应用下的Model类分配到不同的app中去分组,如下图:以《Django实战》中的Model类为例,可以这样指定Order类显示的应用名称:class Order(models.Model): name = models.CharField(max_length=50) address = models.TextField() email = models.Email... 阅读全文
posted @ 2012-02-13 18:18 心内求法 阅读(11943) 评论(0) 推荐(0) 编辑
摘要: 本文最新版已更新至:http://thinkinside.tk/2012/02/12/zen_of_python.htmlThe Zen of Python, by Tim PetersBeautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readability counts.Speci 阅读全文
posted @ 2012-02-12 17:56 心内求法 阅读(513) 评论(0) 推荐(0) 编辑
摘要: 《Rootless Root:The Unix Koans of Master Foo》, 《Unix编程艺术》一书的附录D,原作者不详导言《无根的根》这部心传的收录集在西山纯净的空气中得以保存数十年,它的发现在学术圈中掀起轩然大波。这些出土文稿是否为早期 Unix 教义的新发现?抑或仅是后世高明的赝品?那些半神秘的人物,像尊者 Thompson、Ritchie 和 Mcllroy,是否以此发展出我们所处时代的教义?答案无法确知。各方争论均被收入那本经典之作,《编程之道》(The Tao of Programming)。但是《无根的根》在论调风格上都与那本 James 松散诗化的逸闻译作有显. 阅读全文
posted @ 2012-02-12 17:45 心内求法 阅读(1623) 评论(0) 推荐(0) 编辑
摘要: 内容提要 1. 回顾Django的视图函数(view function) 2. 在视图函数中使用模板 3. 简化视图函数的两个工具 4. 使用通用视图函数 5. Django提供的通用视图 阅读全文
posted @ 2012-02-12 00:57 心内求法 阅读(14006) 评论(3) 推荐(2) 编辑
摘要: 我们已经实现了登录和注销功能,但是它还没有起作用。因为匿名用户还是可以通过直接输入url:http://localhost:8000/depotapp/product/list/ 访问到产品管理界面。这就好像你在门上加了把锁,却没有把窗户关上一样。所以我们还需要进行访问控制。我们这里实现最简单的控制,非登录用户禁止访问产品管理界面。在Django里面,只需要在相应的视图函数前面增加@login_required修饰符即可:from django.contrib.auth.decorators import login_required... ...@login_requireddef list 阅读全文
posted @ 2012-02-10 15:50 心内求法 阅读(11311) 评论(2) 推荐(1) 编辑
摘要: 前一节我们实现了用户管理,本节对用户登录和登出进行处理。由于我们已经引入了django.contrib.auth应用,用户的登录和登出处理变得非常简单。我们已经可以在view函数中判断用户是否已经登录以及获取用户信息:if request.user.is_authenticated(): #判断用户是否已登录 user = request.user; #获取已登录的用户else: user = request.user; #非登录用户将返回AnonymousUser对象Django的User对象提供了一系列的属性和方法,其中pass... 阅读全文
posted @ 2012-02-10 10:29 心内求法 阅读(12415) 评论(1) 推荐(1) 编辑
摘要: 前年写的,居然一直躺在草稿箱里。今天把它放出来。。。GTD(Getting Things Done) 是一种将繁重超负荷的工作生活方式变成无压力高效的时间管理系统(David Allen, 《Getting Things Done-The Art of Stress-Free Productivity》。其核心是把所有要做的事情都记录下来,然后整理组织,并逐一执行。也就是收集、整理、组织、回顾、执行五个过程,如下图:收集:把接收到的各种事件集中在一起;整理:对事件做出快速判断,决定直接抛弃、留存归档或是产生一个任务;组织:根据任务的不同属性将其归入不同的工作清单;回顾:定期检查工作清单,如果条 阅读全文
posted @ 2012-02-09 23:53 心内求法 阅读(3448) 评论(0) 推荐(0) 编辑
摘要: 到目前为止,我们开发的所有功能都是匿名访问的,这显然不够安全。通常我们会要求注册的用户通过用户名和密码登录,只有登录后的用户才可以管理产品。套用专业的说法就是:第一步是认证,验证用户是否是他所宣称的那个人;第二步是授权,验证用户是否拥有执行某种操作的权限。Django已经提供了一个django.contrib.auth应用来处理登录、登出和权限验证,同时还提供了django.contrib.admin应用可以进行用户管理(admin应用还有很多其他的功能)。所以我们只需要将这些app插入到我们的站点,就可以实现登录和用户管理的大部分功能。本节先介绍如何进行用户管理。我们前面已经介绍过在Djan 阅读全文
posted @ 2012-02-09 23:44 心内求法 阅读(6423) 评论(4) 推荐(0) 编辑
摘要: 在上一节我们实现了针对某个产品的订单订阅功能。但是我们可能需要直接在站点上查询所有的订单。显然,随着时间的增长订单会越来越多,所以分页(Pagination)是个好办法:每次只显示一部分订单。分页是Web应用常用的手法,Django提供了一个分页器类Paginator(django.core.paginator.Paginator),可以很容易的实现分页的功能。该类有两个构造参数,一个是数据的集合,另一个是每页放多少条数据。Paginator的基本使用如下:$python manage.py shell>>> from django.core.paginator import 阅读全文
posted @ 2012-02-09 20:33 心内求法 阅读(17289) 评论(2) 推荐(0) 编辑
摘要: 在Zachman Framework之后,很多组织开始了对企业架构的研究。其中 Steven H. Spewak在1998年定义了企业架构计划(Enterprise Architect Planning,EAP)。Spewak将EAP定义为”制定信息架构以支持业务这一过程和实现该过程的计划“。从企业架构的概念来看,EAP更偏重于企业架构的动态部分,包括过程、计划、阶段的划分等。EAP将企业架构的过程分成四个阶段(EAP中叫做层级),如下图所示:Level1:开始启动。形成初步的计划。Level2:现状分析(As-Is)。分析当前的业务过程模型和系统/技术现状,作为实施计划的基线。Level3: 阅读全文
posted @ 2012-02-09 17:17 心内求法 阅读(3665) 评论(0) 推荐(0) 编辑
摘要: 记得有人跟我说过,rails的has_many :through是一个”亮点“,在Django看来,该功能简直不值一提。rails中的many-to-many关联中,还需要你手工创建关联表(写migration的方式),而has_many :through的”语法“只不过是为了自定义关联关系:通过一个中间的、到两端都是many-to-one的模型类实现多对多关联。 在Django中,many-to-many的中间关系表是自动创建的,如果你要指定一个自己的Model类作为关系对象,只需要在需要获取对端的Model类中增加一个ManyToManyField属性,并指定though参数。比如现在我们 阅读全文
posted @ 2012-02-09 15:30 心内求法 阅读(3229) 评论(0) 推荐(0) 编辑
摘要: Zachman Framework 可谓是企业架构框架的鼻祖。早在1987年,IBM的Zachman就指出了信息系统架构的重要性,并提出了著名的企业架构的框架——Zachman framework。现在已经78岁(生于1934年)的Zachman老先生仍在担任Zachman International的CEO,并于2011年8月23日在加州的萨克拉门托发布了Zachman Framework最新的3.0版。向Zachman老先生致敬,并让我们来了解一下最新的Zachman Fraomework 3.0:在Zachman Framework之后,又发展出很多企业架构框架,比如在大型企业中非常流行 阅读全文
posted @ 2012-02-08 15:06 心内求法 阅读(4584) 评论(0) 推荐(0) 编辑
摘要: 有了上一节关于Django模板的基础,改造界面就很容易理解了。将界面设计师设计的页面中的内容根据复用程度分别放到基础模板base.html和专用模板productlist.html中。depot/templates/base.html<html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name=&qu 阅读全文
posted @ 2012-01-31 19:02 心内求法 阅读(6295) 评论(5) 推荐(0) 编辑
摘要: scaffold的生成物虽然用处不大,但是给我们带来一些最佳实践。其中就有模板的继承和分区。如果你深入使用过rails的模板体系,那么恭喜你:你有超强的忍耐力!而且更重要的是,你只需要3分钟就可以理解Django的模板体系。让我们先回顾一下rails的模板系统:1. 你创建了一个xxxview,展现出一些数据。2. 你意识到,各个view都有一些共同的内容。因为rails也强调DRY,所以你决定将这些共同的部分抽取出来。rails也看到了这点,所以你很高兴的看到,rails支持layout。3. rails的layout很简单,类似html的代码,<%= yield %>部分会被具 阅读全文
posted @ 2012-01-31 18:07 心内求法 阅读(6151) 评论(0) 推荐(2) 编辑
摘要: 之前生成了Product类的scaffold,但是如同rails的开发者David所讲的那样,scaffold几乎没什么用。所以按照《Agile Web Development with Rails 4th》中的迭代计划,下一步的修改是美化list页面:但是这个界面还是太丑陋了。其实,有了bootstrap后,很多站点都变成了“又黑又硬”的工具条+“小清新”风格。我们即不能免俗,又懒得自已设计风格,不妨用bootstrap将产品清单界面重新设计成如下的风格:下面让我们来实现这个界面。显然web界面会使用一些静态资源(css,js,image等),要在Django中引入静态资源)。Django在 阅读全文
posted @ 2012-01-31 11:58 心内求法 阅读(23384) 评论(4) 推荐(2) 编辑
摘要: 在上一节用一个插件生成了类似rails的scaffold,其实无非就是URLconf+MTV。让我们看看具体都生成了哪些东西。 首先是“入口”的定义即URLconf,打开urls.py:from django.conf.urls.defaults import patterns, include, urlfrom depot.views import hellourlpatterns = patterns('', url(r'^hello/ hello),)urlpatterns += patterns ('', (r'^depotapp/ 阅读全文
posted @ 2012-01-30 23:25 心内求法 阅读(6638) 评论(1) 推荐(0) 编辑
摘要: rails有一个无用的”神奇“功能,叫做scaffold。能够在model基础上,自动生成CRUD的界面。说它无用,是因为rails的开发者David说,scaffold”不是应用程序开发的目的。它只是在我们构建应用程序时提供支持。当你设计出产品的列表该如何工作时,你依赖于“支架”“生成器”产生创建,更新,和删除的行为。然后在保留这个“动作”时你要替换由“生成器”生成的行为。有时候当你需要一个快速接口时,并且你并不在乎界面的丑陋,“支架”就足够用了。不要指望scaffold能满足你程序的所有需要"。 说它神奇,是因为在rails中你不清楚他是怎么实现的。只告诉你一句话:约定优先于配置 阅读全文
posted @ 2012-01-30 14:34 心内求法 阅读(9760) 评论(8) 推荐(0) 编辑
摘要: Depot是《Agile Web Development with Rails》中的一个购物车应用。该书中用多次迭代的方法,逐步实现购物车应用,使很多人走上了rails开发的道路。遗憾的是Django世界中好像没有类似的指引,也许是因为pythoner 不需要具体的例子。但是如果通过这样一个例子能够让更多的人加入pythoner的队伍,也是一大幸事。本文首先回顾一下depot的需求,在后续内容中将会按照《Agile Web Development with Rails》中的迭代进度,逐步用Django实现depot购物车应用。在原例子的基础上,还会增加一些新的内容,以适应企业级应用的开发。同时 阅读全文
posted @ 2012-01-29 19:56 心内求法 阅读(11326) 评论(2) 推荐(1) 编辑
摘要: 对于一个web框架,掌握了三部分的内容,就可以说是迈出了第一步。1. 准备开发环境2. 创建一个工程,并运行3. 开发hello world应用1. 准备环境 首先应该是安装python和django。这点官方网站有很详细的说明,网上也有很多教程,这里就不再重复了,只是表达一个对操作系统的观点: Mac OS:对程序员和用户都很友好 Linux: 对程序员很友好 Widows:对用户貌似友好 到底使用哪个操作系统,仁者见仁。 然后是开发工具的选择。建议抛弃IDE,使用一个好的文本编辑器。强烈推荐vim。但如果你选择Emacs,我无话可说。2. 创建工程 Django作为一个we... 阅读全文
posted @ 2012-01-29 18:31 心内求法 阅读(9406) 评论(3) 推荐(1) 编辑