1. 初识FlaskFlask 是一个微框架(Micro framework),其官方文档的前言部分对Flask做了很清楚的定性介绍:
Flask尽量避免重复制造轮子,而是与已有的优秀轮子去结合,这使得Flask灵活、强大,且定制性更强。 Flask 配置选项众多,均设置了合理的默认值,并会遵循一些惯例;配置选项均可以修改,但通常没必要修改,尤其是刚开始的时候。这使得Flask易于上手。 2. Flask VS DjangoDjango和Flask是GitHub上star数量最多的2个Python web框架,网上也有很多文章对这两个web框架进行分析和对比,如:
Flask和Django各有优劣,Gevin最初是基于Django做开发的,后来转向Flask,目前两个框架都在使用,就我个人而言,我对这两个框架比较如下: (1)Flask
(2)Django
就我个人而言,虽然我最初选择的Python web框架是Django,但当我开始研究Flask后,Flask就立刻成为我最喜欢的框架,虽然有时基于Flask做开发时会借鉴Django上的一些优点,但Flask的地位却无可动摇。 另外,我记得Django的开发者曾经说过,Django出现的太早了,Flask才是Django最初预期的样子,个中意思,请自己品味,原文原话,我暂时没有找到,如果有朋友看到原话,麻烦给个链接。 3. Flask从入门到精通3.1 Flask入门Flask上手非常容易,仅仅看完Flask官方文档中的Quickstart部分,就可以实现简单的网站了。当然,网站看起来好不好,与html, CSS和js水平有关,这不在Flask的使用范围之内。 接下来就Quickstart章节的内容做一点解释。 文中一开始就指明了,以下简单几行代码,即可拉起一个网站:
简言之,只要创建一个Flask的实例(如上面的app),调用run()方法,网站即被拉起。 做一个网站,最基本的功能莫过于信息/错误的返回,页面的渲染,静态文件的加载,URL构建,session/cookie的使用,request/response的处理等,这些在Quickstart中都有涉及,掌握这些内容,做简单网站就足够了,即入门从Quickstart着手即可。 3.2 Flask精通若要精通Flask,仅仅通过Quickstart快速入门完全不够,那怎样才能把Flask用好呢?用好Flask没什么特殊的捷径,靠的依然是『多使用、多思考、多看他人优秀的代码』,经验可能是编程世界里最恰当称之为掌握新技术的捷径的东西,而经验的积累却又是一个漫长的过程,靠的也是『多使用、多思考、多看他人优秀的代码』。Flask的精通要靠自己努力,优秀的资料可以分享。我在这里推荐几个我觉得不错的资料,欢迎大家补充。 (1) Flask官方文档 Flask官方文档写的还是相当不错的,作为学习Flask的第一手资料没有问题,且Flask官方的Snippets,对开发很有帮助,也能避免开发者花太多时间考虑重复的轮子如何开发 (2) Flask Web开发 这本书相当不错,通过这本书的学习,基本能做到Flask从入门到精通,也是我建议的第一手Flask学习资料。书中介绍的Flask构建大型项目的架构方式,很是受用,很有实际意义。 上面图书作者的博客,是积累Flask开发经验的好资料 (4) Write a Tumblelog Application with Flask and MongoEngine 这是MongoDB官方文档中的一个教程,也是学习Flask开发的一个很好案例,尤其适合Flask+MongoDB开发的应用场景 (5) Flask 源码 Flask 本身是一个非常优秀的Python库,阅读其源码对理解Flask及提高Python开发水平非常有帮助。 (6) The Hitchhiker’s Guide to Python! 这个资料虽然不直接与Flask有关,但对初学者,绝对有学习的价值 4. Flask与数据库大部分网站都要用数据库软件来存储数据,数据库对于任何应用而言都是举足轻重的,因此本节将Flask与数据库的配合作为一个专题展开讨论。 Flask与数据库直连来存取数据虽然没有问题,但会使应用与数据库紧耦合,不利于扩展,也会增加维护代码逻辑的工作量。使用数据库抽象层,会简化Flask与数据库交互的逻辑,也使得Flask与数据库交互的逻辑转移到数据库抽象层搞定,使业务逻辑更清晰,开发也更专注。由于Flask是Micro Framework,自身没有数据库抽象层,而Python生态下有非常多的数据库抽象层可供使用,对Flask而言option非常多,开发者可以选择最好的或自己最熟悉的数据库抽象层应用于开发。 接下来列举一些我熟悉或使用过的数据库抽象层。 4.1 适用于关系型数据库的数据库抽象层适用于关系型数据库的数据库抽象层及ORM(Object Relation Mapping),适用于Flask有: 4.2 适用于NoSQL数据库的数据库抽象层NoSQL数据库非常多,MongoDB是其中一种文档型的NoSQL数据库,由于MongoDB天生就是为互联网开发服务的,而我只用Flask + MongoDB 做过开发,下面仅列出MongoDB的抽象层: 5. Flask 常用库一个强大的框架不仅要练好自己的内功,还要具备各种趁手的武器和装备。Flask 易于扩展,为自己营造了优秀的生态环境,Flask生态下有各种各样的第三方库可供使用,这让我们开发自己的应用时,更高效、更专注,也更稳定。 下面列举一些我常用或了解的库,作为入门,熟悉了这些库,应该很容易开发一个健壮强大的应用了。 5.1 Flask 常用库列表
5.2 Flask 常用库详情flask-script为Flask提供强大的命令行操作,与Django shell类似。 flask-loginFlask user session 管理,提供诸如 flask-admin为Flask应用提供操作简单且易于扩展的数据库管理界面,与Django自带的数据库管理app类似。 Flask-WTFFlask与WTForms的集成,提供强大的Form安全和校验机制,与Django内置的Form功能类似。 flask-principalFlask强大的权限管理机制,灵活性强,提供了一个权限管理的基础框架,是很多Flask权限相关扩展的基础。 flask-restful一个强大的Flask RESTful框架,简单好用。 flask-api相当于Django REST Framework的Flask版,是另一个强大的Flask RESTful框架。 Flask-MailFlask-Mail 为Flask应用添加了SMTP 邮件发送功能 Flask-UserFlask-User集成了用户管理相关功能,并允许对功能做定制性修改,其相关功能包括Register, Confirm email, Login, Change username, Change password, Forgot password等。 Flask-User 基于 flask-securityFlask-Security让开发者能够很快的为应用添加常用的安全机制,其整合了
flask-babelFlask国际化和本地化扩展,基于Babel flask-locale为Flask应用添加语言包,与 6. 最后我个人对Flask的研究,也基本上是按本文思路一步步展开的,希望对初学Flask的朋友有所帮助。关于Flask或者Python的学习,再补充一点,开发Flask第三方库,或者完善已有的Flask库,也是一种很好的实践方法。 欢迎大家与我交流Flask的使用。 |
|