针对 Rails 开发者的 Django 比较

68 篇文章 0 订阅
4 篇文章 0 订阅
Django 是 Python 最流行的 Web 应用开发框架,很多人认为 Django 就相当于 Python 的 Rails。如果你是一个有经验的 Rails 开发者,那么这篇文章将教会你如何使用 Django 来开发,并且帮助你理清 Rails 和 Django 中的概念之间的联系。
我需要做哪些准备工作?


我们假设你是个有一定经验的开发者,不用花费大量的时间去解释一些基本知识,比如Django和Python的安装。如果你确实需要的话,那么请访问这里please look here。我们也不会把精力放在创建一个基本的Django应用上。Django的文档里已经涵盖了这些,如果需要的话,请猛戳this article。


接下来,假设你已经创建好了一个基础的Django应用,现在我们来理清Rails和Django一些概念上的关系吧!赖思苟!




MVC&MTV模式


Rails 是一个MVC模式的开发框架。它通常在app/models/model_name.rb做数据交互层,而app/controllers/controller_name.rb作为控制层,并且通过app/views/.做对应数据层的渲染(视图)。Django也是个MVC框架,但是他和标准的MVC模式存在一定的差异。


在Django中,控制层变成了视图层,传统的视图层变成了模版。


Rails: 控制器使用 Ruby 编码用来决定要显示的数据
Django: 视图使用 Python 代码编写,决定数据的显示


Rails: 视图决定数据如何显示,可以是 erb 和 haml 代码
Django: 模版决定数据如何显示,使用 html 带 Django 专有的标签


Django 调用 MTV architecture and has more details about this in their faqs.


至少Models层还是一样的?


尽管你希望的是这样,但是事实总是不尽人意的。在Rails中db/schema.rb通过命令方式来设计你的数据库。当你增加一个新的model或者修改一个现有的model时,只需运行migration(迁移)命令就能改变数据库对应的表设计。这个文件是根据当前数据库状态自动生成的,通常你不用手动去修改。model的验证方法和业务逻辑一般存放在app/models/model_name.rb文件中。


在Django中,数据库设计的主要依据是app_name/models.py。当我们创建一个新表或者修改了models.py后,需要运行同步或者migrate(迁移)命令。你可以尝试使用一个专门用来处理迁移命令的流行应用south。


在Rails中,DB是主要设计依据,schema.rb根据DB自动生成。在Django中,models.py是主要的设计依据,DB根据model同步生成。


并不复杂的关系


在Rails中,model里面包含着外键,一对多,一对一,多对多的关系配置。在Django中,你只需要把这些作为model的属性。外键,一对一的字段,多对多的字段,这些在Django中只需在一个model中指定就可以。另一个model对象会根据关系自动关联。


belongs_to -> ForeignKey(外键)
has_many -> (Not needed, as Django automatically add these after getting a ForeignKey)(非必须,Django会根据外键自动关联)
has_one -> OneToOneField (只需在一个model中指定)
has_and_belong_to_many -> ManyToManyField (只需在一个model中指定)


 


Model对象和查询


一旦你定义好了model类,就有了很多相似的方法。让我们看看一个定义好的User model在Rails和Django的使用。


Rails: User.create(..)
Django: User.objects.create(..)


编辑后保存一个model


Rails:user.save!
Django:user.save()


Django的查询集和Rails的AR(ActiveRecord)非常相似,他们提供了类似的方法。


Rails: Model.find(10)
Django: Model.objects.get(id=10)


Rails: Model.where(..conditions)
Django: Model.objects.filter(..conditions)


Rails: Model.order(“createdat”)
Django: Model.objects.orderby(“created_at”)


最大的不同在于,在Django中,所有的方法统一管理,替代了Model类管理的方式。


路由和配置


在Rails应用程序中,配置文件位于 config/*, 并且每中环境都有自己单独的配置文件, 比如开发,测试和生产环境.而在Django中大多数配置放在settings.py文件中,Rails把路由信息放在 config/routes.rb 文件中.Django则是把路由/分发信息放在 urls.py文件中,并且是基于正则表达式的.


模板和视图


在Rails视图层一般用ERB模板文件或者haml文件。Django模板层有类似于Rails helpers文件的摸板标签,在Django中,{% include ·· %}摸板标签相当于Rails局部模板的作用。


一些其他方面的对照


开发服务器


Rails:rails server
Django: python manage.py server


开发控制台


Rails: rails console
Django: python manage.py shell


数据库迁移


Rails: rake db:create && rake db:migrate
Django: python manage.py syncdb && python manage.py migrate


任务执行


Django通过执行manage.py中的脚本,Rails则通过rails/rake命令


路由


Rails: config/routes.rb
Django: urls.py


回调


Rails: callbacks-回调函数 (例如保存前触发的事件) 
Django: signals-信号 (例如保存前触发的事件)或者方法的重写例如 .save


监听


Rails: 监听器
Django: 信号


自定义任务


Rails: 通过自定义rake命令方式
Django: 自定义管理命令 


然后呢?


本文应该给出了足够多的东西,让你运用Rails的知识在Django上工作. 本文的目的不是对Rails和Django进行比较, 它们都是非常不错的框架,了解Django能给你一些有价值的点子使你能够更好的使用Rails进行工作,即使你不把Django用于生产环境.


期望倾听关于Rails和Django的相似性和差异.

感谢阅读!


来源:http://www.oschina.net/translate/django-for-the-rails-developer?from=20130103

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值