Py学习  »  问与答

话说Django的自由度

cdxfish • 8 年前 • 2540 次点击  

不常来,今天心血来潮,和大家分享下最近的心得。

常听人说 Django 的自由度很低。 那么就这个topic和大家分享下自己的想法。

笔者也尝试用过flask,原因只有一个,想使用 sqlalchemy。 结果..... 看了一下flask的设计,自己写了个skeleton 就把它放弃了。 设计上,flask做的很轻巧。但是说白了就是Werkzeug 的包装。 其实对Werkzeug的依赖大家是有目共睹的,一旦有flask不支持的功能,我们可能还需要在底层上调用Werkzeug的函数来实现。

ok,回到自由度这个话题。

以两个比较热门的python 包为例子:jinja2 和 sqlalchemy。其实在Django 里面使用jinja2 和 sqlalchemy 很简单。 如果是要使用第三方模板, 直接用就是了,没有啥额外的配置。 只是在我们的view 里面写的时候,要手动调用模板系统来直接渲染。

其实这和大多数比较简陋的框架是一样的。 如果你想实现复用,那么就自己写个backend。 DJ1.8 里面已经提供了Jinja2的backend。 自己测试了下,还不错。但是实在没有任何理由让我用jinja2 的模板来替换django的模板。 当你能够熟练写自定义标签的时候,你会真心喜欢上templatetags 这个东东。 至于性能,我还是想说,用缓存吧。

再说sqlalchemy, 其实也不需要做额外的配置。 只要你了解了django的结构。知道django的哪些特性,依赖了哪些配置,基本上,你就可以有选择的舍弃一些特性,从而迁移到你自己的配置上来。 比如我们如果想我们的application 全盘使用sqlalchemy,那意味着你要放弃django的 admin,django的timezone, modelform。 model等工具,第三方的app 也需要做相关的修改。 可能有些同学要问,要是放弃了这些我还不如使用flask。 当然,你可以选择flask,但是flask究竟又提供了哪些功能呢。 但是我想说的是,其实django 提供的工具还远不止于上面提到的几个。 只要django还有路由系统以及app的组织形式, 他就值得我们用。

Django对小app的组织形式非常清晰,每个app 一个单独目录,使得我们的维护和开发都异常的调理清晰,尤其配合pycharm,简直是居家旅游,杀人灭口的最佳利器。 flask 里面的bluesprint 正是要做和django同样的事情。但是,并没有发现他哪里做的比django好。

笔者,也曾经一度陷入各种python web框架中不能自拔,总想找到一个自由度高,自己看着顺眼的框架。 但是找来找去,突然发现只剩下路由和 app 组织形式的django 正是我一直在找的。而且django 代码质量还是不错的,同时兼容py2和py3. 真的想不出有什么理由迁移到其他的web framework。

其实,python里面web开发方向的常用组件很多都在模仿django。 比如WTForm, 结构和设计理念上和django的form是很类似的。 只是某些方面上,确实比django的form 更好用些。 如果大家感兴趣完全可以使用wtform 来替换django本身的form。

Django 提供了很多常用的组件。 各个组件为了协同工作,某些时候,可能就不得不牺牲一些所谓的灵活。 但是我想说的是django也同样适合订制。在大家抱怨django不够灵活的时候,实际上都是正在贪恋着django自带组件给你带来的一些方便。正是因为方便,才不愿舍弃,不愿舍弃又怎能灵活?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1232
 
2540 次点击  
文章 [ 1 ]  |  最新文章 8 年前
喔喔喔
Reply   •   1 楼
喔喔喔    8 年前

有道理