Django的第一印象

32 篇文章 1 订阅
14 篇文章 0 订阅
        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类:

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

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

       上述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即可,本端不用声明,可以直接引用

Django的代码清楚明白,每一条语句都很明确。这就是Django的风格。(顺便说一句,Django的灵活性不以牺牲外键关联为代价,而rails的数据库中不支持外键关系)
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值