本文首发于Gevin的博客html
原文连接:Flask 入门指南python
未经 Gevin 受权,禁止转载git
Flask 是一个微框架(Micro framework),其官方文档的前言部分对Flask作了很清楚的定性介绍:github
“微”(Micro)是什么意思?
“微”(micro) 并不意味着你要把整个web应用放到一个python文件里(虽然确实能够),也不意味着Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心功能的简单而易于扩展。Flask 不会替你作出太多决策,好比使用何种数据库。而那些 Flask 帮你作好的决策(好比使用哪一种模板引擎),都是很容易替换。除此以外的一切都由可由你掌握。web
默认状况下,Flask 不包含数据库抽象层、表单验证,或是任何已在其它已库中处理的很好的功能。相反,Flask 支持经过扩展来给应用添加这些功能,如同是 Flask 自己实现的同样。众多的扩展提供了数据库集成、表单验证、上传处理及各类各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在复杂的生产环境中投入使用。sql
Flask尽可能避免重复制造轮子,而是与已有的优秀轮子去结合,这使得Flask灵活、强大,且定制性更强。 Flask 配置选项众多,均设置了合理的默认值,并会遵循一些惯例;配置选项都可以修改,但一般不必修改,尤为是刚开始的时候。这使得Flask易于上手。mongodb
Django和Flask是GitHub上star数量最多的2个Python web框架,网上也有不少文章对这两个web框架进行分析和对比,如:shell
Flask和Django各有优劣,Gevin最初是基于Django作开发的,后来转向Flask,目前两个框架都在使用,就我我的而言,我对这两个框架比较以下:数据库
(1)Flaskdjango
(2)Django
就我我的而言,虽然我最初选择的Python web框架是Django,但当我开始研究Flask后,Flask就马上成为我最喜欢的框架,虽然有时基于Flask作开发时会借鉴Django上的一些优势,但Flask的地位却无可动摇。
另外,我记得Django的开发者曾经说过,Django出现的太早了,Flask才是Django最初预期的样子,个中意思,请本身品味,原文原话,我暂时没有找到,若是有朋友看到原话,麻烦给个连接。
Flask上手很是容易,仅仅看完Flask官方文档中的Quickstart部分,就能够实现简单的网站了。固然,网站看起来好很差,与html, CSS和js水平有关,这不在Flask的使用范围以内。
接下来就Quickstart章节的内容作一点解释。
文中一开始就指明了,如下简单几行代码,便可拉起一个网站:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()复制代码
简言之,只要建立一个Flask的实例(如上面的app),调用run()方法,网站即被拉起。 @app.route('/')
设置网站的url路由,下面的函数实现了访问该url时要运行的功能。仅基于以上简单代码承载的逻辑,便可把任一个python 库的功能转换成网站或简单的web api,若是想开放RESTful API,基于这个逻辑从零开始作完成没有问题,虽然更好的方式是基于RESTful相关第三方库。随着网站的功能的增长,代码的行数也会剧增,这时全部的代码都放到一个文件中会很难管理,所以,Flask虽然一个文件就能够实现一个网站,但即使作一个小型网站,最好的方式也是将不一样的逻辑放到不一样的文件中,文件的组织方式随我的喜爱而定,能够借鉴他人优秀的代码,也能够本身摸索。
作一个网站,最基本的功能莫过于信息/错误的返回,页面的渲染,静态文件的加载,URL构建,session/cookie的使用,request/response的处理等,这些在Quickstart中都有涉及,掌握这些内容,作简单网站就足够了,即入门从Quickstart着手便可。
若要精通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有关,但对初学者,绝对有学习的价值
大部分网站都要用数据库软件来存储数据,数据库对于任何应用而言都是举足轻重的,所以本节将Flask与数据库的配合做为一个专题展开讨论。
Flask与数据库直连来存取数据虽然没有问题,但会使应用与数据库紧耦合,不利于扩展,也会增长维护代码逻辑的工做量。使用数据库抽象层,会简化Flask与数据库交互的逻辑,也使得Flask与数据库交互的逻辑转移到数据库抽象层搞定,使业务逻辑更清晰,开发也更专一。因为Flask是Micro Framework,自身没有数据库抽象层,而Python生态下有很是多的数据库抽象层可供使用,对Flask而言option很是多,开发者能够选择最好的或本身最熟悉的数据库抽象层应用于开发。
接下来列举一些我熟悉或使用过的数据库抽象层。
适用于关系型数据库的数据库抽象层及ORM(Object Relation Mapping),适用于Flask有:
NoSQL数据库很是多,MongoDB是其中一种文档型的NoSQL数据库,因为MongoDB天生就是为互联网开发服务的,而我只用Flask + MongoDB 作过开发,下面仅列出MongoDB的抽象层:
一个强大的框架不只要练好本身的内功,还要具有各类趁手的武器和装备。Flask 易于扩展,为本身营造了优秀的生态环境,Flask生态下有各类各样的第三方库可供使用,这让咱们开发本身的应用时,更高效、更专一,也更稳定。
下面列举一些我经常使用或了解的库,做为入门,熟悉了这些库,应该很容易开发一个健壮强大的应用了。
为Flask提供强大的命令行操做,与Django shell相似。
Flask user session 管理,提供诸如login_user
, logout_user
, login_required
, current_user
等功能,也是其余不少Flask库的基础。
为Flask应用提供操做简单且易于扩展的数据库管理界面,与Django自带的数据库管理app相似。
Flask与WTForms的集成,提供强大的Form安全和校验机制,与Django内置的Form功能相似。
Flask强大的权限管理机制,灵活性强,提供了一个权限管理的基础框架,是不少Flask权限相关扩展的基础。
一个强大的Flask RESTful框架,简单好用。
至关于Django REST Framework的Flask版,是另外一个强大的Flask RESTful框架。
Flask-Mail 为Flask应用添加了SMTP 邮件发送功能
Flask-User集成了用户管理相关功能,并容许对功能作定制性修改,其相关功能包括Register, Confirm email, Login, Change username, Change password, Forgot password等。
Flask-User 基于Flask-SQLAlchemy
,NoSQL数据库没法使用。
Flask-Security让开发者可以很快的为应用添加经常使用的安全机制,其整合了Flask-Login
, Flask-Mail
, Flask-Principal
, Flask-Script
等应用。其安全机制包括:
Flask国际化和本地化扩展,基于Babel
为Flask应用添加语言包,与flask-babel
相似。
我我的对Flask的研究,也基本上是按本文思路一步步展开的,但愿对初学Flask的朋友有所帮助。关于Flask或者Python的学习,再补充一点,开发Flask第三方库,或者完善已有的Flask库,也是一种很好的实践方法。
欢迎你们与我交流Flask的使用。