Web 全栈框架, Rails or Django? (有部分爬虫需求)

2016-11-06 18:47:28 +08:00
 WildCat

团队现状: 一共两人,一个负责 marketing/product ,一个(我)负责开发(全栈)。非前后端分离应用。 个人对两个框架的熟悉程度:Rails 过去用的稍多,Django 少一些但是比较熟悉。

web 框架选择考虑如下几个方面(含个人简介,求评价):

  1. ORM :肯定 ActiveRecord 最方便,但是 Django ORM 也很好用了
  2. 爬虫需求: Rails 里打算 mechanize + nokogiri + sidekiq + whenever ,感觉这样性能不高。 Django 里面打算通过 celery 调用 scrapy 。总体 Python 里写爬虫方便。爬虫有重度需求(约为后端总代码量 30%)。
  3. 后台: Rails 目前考虑 rails_admin ,但是感觉 Django admin 更好一些
  4. asset pipeline : Rails 的感觉挺好用, Django 不了解。即使不行也不用担心,大不了用 webpack 自己打包。
  5. 微信相关库:感觉都差不多。

纠结的点主要在 rails 和 ruby 上,这两者感觉更新都不活跃了, TIOBE 最近的排名 Ruby 掉得也很快。生态上还是 Python 稍胜一筹。

10367 次点击
所在节点    程序员
71 条回复
georgema1982
2016-11-10 05:24:19 +08:00
@crazycookie 确实 django 在传统 request response 的 app 开发上已经远远领先其竞争对手了。只可惜当初因为 rails 比较火,导致 rails 本身有些盲目膨胀的自信,而其它框架也盲目仿造 rails ,以至于 rails 和其模仿者都没有意识到 django 在 1.4 以后已经在设计理念上远远把它们甩开了距离。
georgema1982
2016-11-10 05:25:50 +08:00
@shyling 没说你什么都不会,但你肯定不会 django 。不要以为看了 djangobook 之类的入门教材就叫会 django 了。你其实连 django 的门槛都还没进入,因为真正的 django 代码都不是这种入门教材里那么写的
WildCat
2016-11-10 05:56:25 +08:00
@georgema1982 您好前辈,有没有办法接触到您说的这种理念?
nanlong
2016-11-10 08:16:34 +08:00
@georgema1982 请大概讲一下有哪些设计理念甩开了 rails ?
crazycookie
2016-11-10 09:44:00 +08:00
@georgema1982 真正设计理念都是在代码中的,阅读了 Django 的源代码,发现它各个版本的更新迭代非常靠谱
这个版本没有满足和设计不合理的地方,下个版本就做出了更改,重点是这种修改不是把问题和代码复杂化,而是更加简单。
我从 1.4 跟到了 2.0 ,经历了没有 migrate ,只有 south 插件的痛苦时期,现在可以 migrate 了,感觉 xx 都通畅了

Python 中很多项目都在向 Django 致敬,比如 Scrapy ,就是模仿的 Django 的内部结构

入门教材来说, Django 的文档和教材一级棒, but ,用多了需要自己阅读源代码来补充
很多人说 Django 太大了,我觉得是很多人无知而无畏, web 的很多问题和轮子这些朋友完全不考虑的,目测其中一大半人连 csrf 都不知道是什么吧。(用 Java , Spring 之类朋友应该超过九成不知道这个是什么,对,黑的就是你)

点名批评下 laravel , 不要仿造 rails ,(敲黑板!
再黑一把, PHP 的很多 Framework ,说白了就是 toolkit
对 ruby 的爱,只有 msf
crazycookie
2016-11-10 09:48:51 +08:00
@WildCat Django 和 Scrapy 是无缝对接的啊, 加 3 行代码就行了,直接用 Django 的 ORM 存数据(别和我说你的数据量很大,这个就不推荐了
shyling
2016-11-10 10:51:53 +08:00
@georgema1982 哈哈,我就笑笑
Matrixbirds
2016-11-10 12:24:03 +08:00
既然都 rails 了 还用 django.. 爬虫服务可以用 node 撒
georgema1982
2016-11-11 08:41:03 +08:00
@WildCat
@nanlong
django 最鲜明的理念就是 DRY 。所以它设计得让程序员可以写几乎没有冗余的代码。用 rails 的人可能说,我的代码也没冗余呀。其实冗余就在那里,但是习惯 rails 的行惯性思维让他们看不到存在的冗余。 rails 最大的问题就是它最初吸引人的特点,即脚手架,说穿了就是一个代码生成器。脚手架生成的代码本身就是一种冗余。为什么?因为生成的 crud 代码都有一样的 pattern ,比如 detail view 都是根据一个主键去获得某个数据; edit view 都是先根据主键获得设据,然后把数据注入一个 form ;等等等等。脚手架不过是反复生成这样的 pattern 。而 django 从 1.4 开始提供 class based view ,这些 view 本身就包含了 crud 的 pattern ,你只要像写配置文件一样配置就可以了,而且这种类似配置的代码不存在任何魔法,只是使用了最基本的 oop 的概念而已,一看就明白。

再举个例子, django 的 form 也设计得非常好。很多框架的 form 的每个字段依然是基本数据类型,如 string , int , list 等。你要显示它们还要在 view 里使用特殊的 tag 来显示( java 程序员们,这听起来是不是很熟悉?)。而 django form 的每个字段是一个包装得非常好的 field ,每个 field 包含了显示的控件, validation 的逻辑等,所以显示 form 的时候代码可以反复重用。

另外 django 一个非常重要的理念就是 model 是整个项目中唯一的真理, form 是由 model 决定基本行为的, view 是由 model 决定基本行为的, migration 也是根据 model 来产生的。所以 django 程序员从头至尾都是在思考着业务对应的 model ,而不会被其它东西分心,因为他们知道只要理解了业务,就能定义正确的 model ,而 form , view 都是 model 驱动的(在代码的表现上就是 form 和 view 都是像写配置文件一样,只要指定 model ,一个 app 的基本形态也完成了)。

所有这些先进的理念都体现出 django 设计者对 oop 有真正深入的理解,实际运用到设计中,而不是只是当作一种教条在那里宣传。当然这也和 python 本身的特点有关,即 python 完美解决了多重继承的问题,使得多重继承没有那么可怕,相反让程序员如虎添翼。
nanlong
2016-11-11 09:07:00 +08:00
@georgema1982 非常好 请你坚定不移的走 Django 路线 加油
EzVoodoo
2016-11-15 19:55:15 +08:00
@georgema1982 写得不错。 Rails 和 Django 都用过,总的感觉还是 Too much magic in Rails; Django is much cleaner and clearer.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/318509

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX