《Flask Web开发 基于Python的Web应用开发实战》简评
指路牌
《Flask Web开发》
《Flask Web开发 基于Python的Web应用开发实战》
《Flask Web开发》是否适合新手入门Python Web开发?
正文
《Flask Web开发 基于Python的Web应用开发实战》,O'Reilly"动物书系列"的"狗书",应该是很多Flask初学者被推荐使用的入门书,但是这本书真的适合初学者吗?
Python的Web框架非常多,例如Django、Flask、Tornado、Web.py,Tornado没有接触过,无法评价,Django一般都会和"重型"联系在一起,很少会直接推荐给初学者,Flask和Web.py都属于轻型框架,网上有人将Flask与Web.py对比,有一篇很有意思的Blog有兴趣的可以去看一下关于Flask和web.py的一句话比较(很老的blog),孰优孰略有请各位自行选择。
值得一提的是微信公众平台的入门教程文档,就是基于web.py编写的
这里要吐槽一下微信公众平台维护文档的团队,能不能别出这么级的错误......
《Flask Web》开发是我Web开发的入门书,在第一版的时候就买了,后来书出了第二版,也买了第二版。这篇Blog的重点不是讨论Flask框架,而是讨论这本书本身,如果你选择学习Flask,以下意见对你才有意义。
直接抛出结论::这本书并不适合初学者,或者说,"现在"不适合了。
这个结论是基于以下几个原因
- 模板渲染的内容
- 部分章节国内无法实践
- 内容太过于"系统"
以上原因其实有些是有点吹毛求疵的,但是这些观点的出发点是两个:"对于初学者" and "想快捷搭建简单web服务的开发者"。
模板渲染"过时"了.........吗?
这个问题的答案我不得而知,但起码在我心里,模板渲染是"过时的老东西",因为当下流行的是前后端分离,是React、Vue、Angular三大前端框架,而不是还需要后台操控的模版渲染。
Flask与Jinja2几乎总是被同时提起的,这本书实现的项目的整体思路都是基于Jinja2模板引擎的,这在这本书发行期是没任何问题的,但是现在前端技术的发展已经让这本书的内容跟不上了,现在提倡的是"前后端分离",前后端通过Rest API交互。
我个人是直接放弃了模板渲染,直接从Vue入手的前端技术。
部分章节国内无法实践
《Flask Web开发》一个很大的特色点就是整本书就是一个项目,完成了整本书的教程,就是完成一个博客系统,就像书评说的一样,相比于只讲解零散代码的其他书籍,这无疑是很好的。但,"第六章电子邮件"必是一道坎,因为书中的内容是基于Gmail的....众所周知的原因,我们无法使用Gmail提供的SMTP服务,甚至无法登陆Gmail,初学者必然需要在网上找寻替代解决方案(我当时是找的126的SMTP服务替代)。
为什么是必然呢?跳过这一章不行吗?因为这本书的内容一环扣一环,不把这个问题解决,后续的内容就无法推进,对于初学者,答案明显是不行,这是学到一定地步才能做到的。
至于后面第17章国内很少使用的云平台就更不提了
内容太过于"系统"
这可能是最奇怪的一个原因,"系统"点难道还错了?当然没错,但是还是那个原因,不适合初学者。在我看来初学者能编写视图函数,操作ORM,学会使用钩子,配置跨域,已经能够完成一个简单的web应用了。而数据库迁移、工厂函数、蓝本、单元测试等,不是一个初学者能hold的住的内容?但是这些知识在书中是交叉进行,并且从第二部分开始强制全部内容都是基于工程化结构(工厂函数、蓝本等)进行的,这里我在初学时是直接被劝退了的。
即使跳开初学者这一原因,就现在而言,我也不是很喜欢使用Flask的工程化结构,为什么?这可能需要先明确一点,"我为什么要使用Flask?",因为轻便,快捷。我选择Flask不是为了开发一个商用工程项目(如果是这个目的肯定就用SpringBoot了),而是为了快,短时间内完成一个POC,或者在学习集群等技术时构建一个简单的服务,这些需求往往只需要几十行代码就能完成,为什么要自找麻烦的使用工程化的目录结构呢?
最近写的自己的博客系统雏形,配置跨域、视图函数,ORM,基于web token的登陆管理,也才不到140行
结论
所以这本书的正确打开方式是什么呢?
我个人看来,这本书第5章之前的内容(前60页,整本书约200页)是初学者可以看的,会有很多重要概念,但是再往后的,只推荐第14章,比较矛盾的点是第14章是基于工程化结构编写的,直接看会有一些难度......所以现在这本书在我手里等价于一本工具书,需要的时候翻阅需要的章节,而且大部分时间需要再处理一遍示例代码才能使用,但是从始至终,这本书我都没有系统从头看到尾.
以上内容,希望能给想要以此本书的入门Flask的人一点用处。
要获取更多Haytham原创文章,请关注公众号"许聚龙":