2KB项目,专业的源码交易网站 帮助 收藏 每日签到

针对 Rails 开发者的 Django 比较

  • 时间:2019-01-23 18:42 编辑:2KB 来源:2KB.COM 阅读:397
  • 扫一扫,手机访问
  • 分享
摘要:
Django Rails 英文原文:Django for the Rails Developer Django 是 Python 最流行的 Web 应用开发框架,很多人认为 Django 就相当于 Python 的 Rails。如果你是一个有经验的 Rails 开发者,那么这篇文章将教会你如何使用 Django 来开发,并且帮助你理清 Rails 和 Django 中的概念之间的联系。

我需要做哪些准备工作?

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

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

其它翻译版本 (1) 加载中

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自定义管理命令
 

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部