Flask入门及进阶指南-第一篇 Flask基础篇--Python Web开发概述

        本书第一篇Flask基础篇,主要介绍学习Flask开发的基础知识,第1章从Python语言做Web开发讲起,介绍了Python的几种当前主流的Web框架,以及框架选型的原则建议,第2章进一步讲解开始Flask开发环境的搭建,Flask的开发Python的基础知识,后续第3章以后讲解Flask开发实践运用的相关知识,包括视图和路由,Flask模板、Flask表单、Flask数据库、Flask蓝图与测试。

       每章节对相应的概念和术语都会做精炼的讲解,并提供相关的示例程序或核心代码,并附有注释和讲解,要点处会有着重标注,有助于学习者更清晰的理解。

       本篇章节更适用于学入门或开发基础薄弱者进行学习。

    Python Web开发概述

本章从为什么用Python做Web开发讲起,有哪些优势和特点,Python的Web框架有很多,我们列出Python主流Web框架,并各自列出优缺点,给读者做参考选型之用。

1.1  为什么选择Python做Web开发

当下Web开发非常的普及,有很多的编程语言可以选择,为什么选择Python呢?

2019年2月,在编程语言流行指数(PopularitY of Programming Language,简称PYPL)公布二月榜单中,Python语言排名第一,超越Java成为最流行的编程语言,可见Python现在有多么流行。现在无论PC端还是移动互联网的Web开发工作,对产品做的各种尝试都需要更快地拿出模型并进行迭代,创业公司尤甚。Python语言更好地符合了时代的需求,所以它也受到了越来越多的关注,越来越多的人接受Python,并在生产环境中使用它。个人认为Python非常适合做Web开发,理由如下:

(1)Python是一门优雅而健壮的编程语言,它继承了传统编译语言的强大性和通用性,同时借鉴了简单脚本和解释型语言的易用性。Python非常适合做快速的原型开发。很多场景下的性能问题可以通过使用C/C++写Python扩展等方式优化解决。

(2)Python应用广泛,在大数据、算法、运维等领域都有不错的对应工具和库,可以有效降低产品流程中不同职位之间的技术壁垒,团队人员的沟通更容易,解决问题更快。

(3)Python标准库和第三方库很强大,有非常多的知名项目都是用Python编写的。

(4)从2005年Django开源,2008年Reddit开源,到2010年Flask开源,Python用作Web开发已经有着10多年的历史,国内的豆瓣、搜狐、国外的Reddit、YouTube、Instagram、Pinterest、Bitbucket、Disqus、Dropbox等公司都选择Python作为Web开发语言。不用担心Python可靠性与性能问题,因为它已经经受了事件和大规模用户并发访问的考验。

1.2  Python主流Web框架介绍

Python的Web框架非常多,每种框架都有各自的开发者在使用,他们使用熟悉自己用的框架都会觉得好,以致互相争论哪个框架好坏优劣,Web开发工程师面临框架选型,往往会非常困扰,尤其对初中级工程师,没有具体使用经验,不知道如何选择。我们就来介绍当前主流的Web框架特点和应用场景。

主流的Web框架有以下几种:

  1. Django

Django最初是被开发用来管理劳伦斯出版集团旗下以下以新闻内容为主的网站的,它以比利时的吉普赛爵士吉他手Django Reinhardt来命名,它和Flask是使用最广泛的Python Web框架,Django能如此知名很大程度上是因为提供了非常齐备的官方文档。它提供了一站式的解决方案,包括缓存、ORM、管理后台、验证、表单处理等。使得开发复杂的数据库驱动的网站变得很简单。但正因为它坚持自己对于Web框架的理解,系统耦合度太高,替换掉内置的功能往往需要花费一些功夫,所以学习曲线也相当陡峭。

  1. Flask

Flask是一个轻量级Web应用框架,它基于Werkzeug实现的WSGI和Jinja2模板引擎。Flask的作者是Armin Ronacher,本来这只是作者愚人节开的一个玩笑,但是开源之后却受到Python程序员的喜爱,目前在GitHub上的Star数量已经超过了Django。它的设计哲学和Django不同;只保留核心,通过扩展机制来增加其他功能。Flask用到的依赖都是Pocoo团队开发的。Pocoo团队其他的项目还有Pygments、Sphinx、以及Iodgedit。Flask的扩展环境非常繁荣,基本上Web应用的每个环节都有对应的扩展供选择。就算没有对应的扩展也能很方便地自己实现一个。

  1. Pyramid

Pyramid在国内知名度并不高,主要原因是中文文档匮乏,其高级用法需要通过阅读源代码获取灵感,尽管被Django和Flask的光芒遮蔽,但是它的性能要比Flask高,Pyramid的灵感来源于Zope、Pylons1.0heDjango。在我们的传统观点里,小框架通常牺牲了大框架的特色,反之亦然。但是事实上我们不能真正把控一个应用程序最终的发展情况,而Pyramid在努力朝着胜任不同级别应用的框架方向在走。虽然它默认使用Chameleon和Mako模板,但很容易切换成Jinja2,深圳可以让多种模板引擎共存,通过问卷后缀名来识别。豆瓣赞赏和豆瓣钱包等产品就是基于此框架实现的,代码量级和Flask相同,性能比Flask略高。

  1. Bottle

Bottle也是一个轻量级的Web框架。它的特点是单文件,代码只使用了 Python标准库,而不需要额外依赖其他第三方库。它更符合微框架的定义,截止到今天只有4100多行代码。

  1. Tornado

Tornado全称Tornado Web Server,最初是由FriendFeed开发的非阻塞式Web服务器,现在我们看到的是被Fackbook收购后开源出来的版本。它和其他主流框架有个明显的区别;它是非阻塞式服务器,而且速度相当快。得益于其非阻塞的方式和对epoll的运营,Tornado每秒的是可以处理数以千计的连接。这意味着对于长轮询,WebSocket等实时Web服务来说,Tornado是一个理想的Web框架。

  1. Web.py

Web.py也是一个微框架,由Reddit联合创始人、RSS规格合作创造者,著名计算机黑客Aaron Swartz开发。Web.py使用基于类的视图。简单易学却功能强大。

  1. 小众的Web框架
  1. Quixote

Quixote是由美国全国研究创新联合会(Corporation for National Research Initiatives,CNRI)的工程师A.M.Kuchling、NeilSchemenauer和Greg Ward开发的一个轻量级Web框架。它简单、高效、代码简洁。豆瓣的大部分用户产品都使用定制版的Quixote作为Web框架,虽说这有历史原因(当时Django/Flask等框架还没有出现)。但是也证明这个始于2000年的框架是可以经受时间考验的。它使用目录式的URL分发规则,用Python来写模板。PTL模板更适合程序员,但是并不适合美工参与前端代码的编写和修改,豆瓣在开发中使用了Mako替代PTL。不建议在生产环境选用Quixote。

  1. Klein

Klein是Twisted组织开源出来的基于werkzeug和twisted web的微框架。Flask很不错,但是不能使用异步非阻塞的方式编程,根本原因是它和Django、Pyramid一样,都基于WSGI,而WSGI的接口是同步阻塞的。Klein用法非常像Flask,却可以使用异步的方式开发Web应用。

1.3  选择Web框架的原则的建议

介绍这么多的框架,那么在工作中怎么进行选择呢?以下是笔者总结的一些原则:

(1)选择更主流的框架。因为它们的文档更齐全,技术积累更多,社区更繁盛,能得到更好的支持。

(2)关注框架的活跃情况。关注项目的更新频率、Issue和Pull Request的响应情况。如果一个项目已经很长时间没有更新了,或者有一堆问题需要解决但是没有得到回应,就不应该将这一的框架放在生产环境中。

(3)确认选择的框架是否足够满足需求。没有更好的框架,只有最适合的框架。你所选择的Web框架不仅需要满足当前的需求,也要充分考虑项目发展一段时间之后的情况。即前瞻性。如果在做选择时有个人喜好这样的因素,需要确认自己有能力对选择的Web框架提供支持,避免盲目选择而导致将来推到重来的情况。

(4)注意媒体时效性。在做选择的时候可能会参考网络上的一些文章,但是需要注意其发表时间。举个例子,看了一篇2012年的博客,里面说应该选择A而不是B,并给了多个理由。而现在的情形可能已经发生了编号;B经过很久的努力已经做得更优秀或者2012年之后出现了更优秀的C。

(5)客观看待媒体的观点。媒体的观点并不一定是正确的(或者不是全部正确)。如果不是官方的说明,就应该保持怀疑和谨慎的态度,取其精华去其糟粕,切勿完全拿来主义,应该真正做实践验证之后再做决定。

对于上述的Web框架,可以参考如下几条建议:

(1)如果是为了供演示或者不太考虑长期发展,只是需要用到数据库的CURD操作,些REST API之类的简单型应用,框架的选择非常宽松,用着顺手的即可。

(2)如果你是初学Web框架,建议选择Flask作为入门框架,学习曲线相对Django而言要低很多。等熟悉Flask之后再学习Django,就会容易很多。

(3)Pyramid和Django都是面向大型应用的,Pyramid更灵活,开发者空间大很多,值得考虑。

(4)网站性能出现问题时,往往问题不只出在Web框架和编程语言上,做选择时在环境中按实际产品逻辑测试一段时间即可得到结论就,但是不要只相信看到的一些性能对比文章,尤其不要做无意义的Hello World级别的测试。

1.4  Flask框架开发特性

Flask是非常流行的Python Web框架,它能如此流行,原因主要有如下几点:

(1)有非常齐全的官方文档,上手非常方便。

(2)有非常好的扩展机制和第三方扩展环境,工作中常见的软件都会有对应的扩展。自己动手实现扩展也很容易。

(3)社区活跃度非常高。

(4)微框架的形式给开发者更大的选择空间。

(5)Pocoo团队出品,Flask和相关依赖(Jinja2,Werkzeug)的设计很优秀。比如使用装饰器配置路由、用Blueprint实现模块化、请求/应用上下文等。

Flask主要依赖三个库:

(1)Jinja2:默认的模板引擎。

(2)Werkzeug:一个包含WSGI、路由、调试的工具集。

(3)Itsdangerous:基于Django签名模块(http://bit.ly/28QV7Fb)的签名实现。

Flask本身尽量保持了内核的精简,其设计初衷就是不会替开发者做太多决策,而且就算Flask已经帮你做出选择也能很容易地替换。举2个例子:

(1)Web程序不可避免要和数据库打交道,使用SQLAlchemy、MongoEngine、不用ORM(对象关系映射)而直接基于MySQL-Python这样底层驱动进行开发都是可以的,选择权完全在你的手中。

(2)把默认的Jinja2模板引擎替换成Mako或者其他模板引擎都非常容易。

1.5  本章小结

本章从Python成为第一位的语言流行讲起,讲述了Python做Web开发的主流框架,以及列举出当下众多的Python Web框架,分别进行点评,并对如何进行Web框架对比选型给出一些建议,进而讲述Flask做Web开发框架的特性和优势。

发布了179 篇原创文章 · 获赞 16 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/yan_dk/article/details/104086194