Django遵守 BSD版权,目前最新的稳定版(stable)是2011年9月发布的v1.3.1。
Django 的名称来源于比利时的爵士音乐家Django Reinhardt,他是一个吉普赛人,主要演奏吉它。与rails一样,Django强调 松耦合、少写代码、快速开发、DRY、一致性等原则。但Django与rails在设计哲学上最大的不同在于,Django强调“显示说明优于隐含意义”,这一点来自于Python的核心原则。
这一设计哲学的不同使得Django与rails有很大的不同:Django不喜欢“魔术代码”。尽管魔术代码看起来很酷,但是存在着如下问题:
比如《Agile Web Development with Rails》中开篇用来吸引人的那个例子,一个关于项目的Model类:
class Project < ActiveRecord::Base belongs_to :portfolio has_one :project_manager has_many :milestones has_and_belongs_to_many :categories validates_presence_of :name, :description validates_acceptance_of :non_disclosure_agreement validates_uniqueness_of :key end看上去很神奇对吗?但是你马上就会提出几个问题:
1)除了关联关系外,对象自身的属性在哪里定义?
2)non_discolosure_agreement是什么属性?
3)validates_xxx 之类的语法到底有多少种?
...
本文并不是以介绍rails为主,所以上述问题在这里不作回答。但是为了与Django的Model对比,还需要补全rails 模型的另外一个部分:migration。事实上,在rails中,上面的Model还需要一个db migrate 类一起才能工作:
class CreateProject < ActiveRecord::Migration def change create_table :projects do |t| t.integer :portfolio_id t.string :name t.text :description ... end end end上述Model类在Django中以如下简单明了的方式来实现:
class Project(models.Model): portfolio = models.ForeignKey(Portfolio) categories = models.ManyToManyField(Category) name = models.CharField() description = models.TextField() #其中has_one, has_many 之类的关系只在对端声明ForeighKey即可,本端不用声明,可以直接引用