pthon web框架优劣:

知乎上有一个讨论Python 有哪些好的 Web 框架?,从这个讨论中最后我选择了flask,原因是:

  • Django,流行但是笨重,还麻烦,人生苦短,肯定不选
  • web.py,轻量,但据说作者仙逝无人维护,好吧,先pass
  • tornado,据说倡导自己造轮子,虽然是facebook开源的吧,但听到这个,就算了吧
  • 还有一些其他的就不说了,直到看到一个人做了如下回复,就暂定了flask,再发现flask写RESTful居然超简单,于是就它了

1. 初识Flask

Flask 是一个微框架(Micro framework),其官方文档的前言部分对Flask做了很清楚的定性介绍:

“微”(Micro)是什么意思?

“微”(micro) 并不意味着你要把整个web应用放到一个python文件里(虽然确实可以),也不意味着Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心功能的简单而易于扩展。Flask 不会替你做出太多决策,比如使用何种数据库。而那些 Flask 帮你做好的决策(比如使用哪种模板引擎),都是很容易替换。除此之外的一切都由可由你掌握。

默认情况下,Flask 不包含数据库抽象层、表单验证,或是任何已在其它已库中处理的很好的功能。相反,Flask 支持通过扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理及各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在复杂的生产环境中投入使用。

Flask尽量避免重复制造轮子,而是与已有的优秀轮子去结合,这使得Flask灵活、强大,且定制性更强。
Flask 配置选项众多,均设置了合理的默认值,并会遵循一些惯例;配置选项均可以修改,但通常没必要修改,尤其是刚开始的时候。这使得Flask易于上手。

2. Flask从入门到精通

2.1 Flask入门

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着手即可。

2.2 Flask精通

若要精通Flask,仅仅通过Quickstart快速入门完全不够,那怎样才能把Flask用好呢?用好Flask没什么特殊的捷径,靠的依然是『多使用、多思考、多看他人优秀的代码』,经验可能是编程世界里最恰当称之为掌握新技术的捷径的东西,而经验的积累却又是一个漫长的过程,靠的也是『多使用、多思考、多看他人优秀的代码』。Flask的精通要靠自己努力,优秀的资料可以分享。我在这里推荐几个我觉得不错的资料,欢迎大家补充。

(1) Flask官方文档

Flask官方文档写的还是相当不错的,作为学习Flask的第一手资料没有问题,且Flask官方的Snippets,对开发很有帮助,也能避免开发者花太多时间考虑重复的轮子如何开发

(2) Flask Web开发

这本书相当不错,通过这本书的学习,基本能做到Flask从入门到精通,也是我建议的第一手Flask学习资料。书中介绍的Flask构建大型项目的架构方式,很是受用,很有实际意义。

(3) miguelgrinberg.com

上面图书作者的博客,是积累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有关,但对初学者,绝对有学习的价值

3. Flask与数据库

大部分网站都要用数据库软件来存储数据,数据库对于任何应用而言都是举足轻重的,因此本节将Flask与数据库的配合作为一个专题展开讨论。

Flask与数据库直连来存取数据虽然没有问题,但会使应用与数据库紧耦合,不利于扩展,也会增加维护代码逻辑的工作量。使用数据库抽象层,会简化Flask与数据库交互的逻辑,也使得Flask与数据库交互的逻辑转移到数据库抽象层搞定,使业务逻辑更清晰,开发也更专注。由于Flask是Micro Framework,自身没有数据库抽象层,而Python生态下有非常多的数据库抽象层可供使用,对Flask而言option非常多,开发者可以选择最好的或自己最熟悉的数据库抽象层应用于开发。

接下来列举一些我熟悉或使用过的数据库抽象层。

3.1 适用于关系型数据库的数据库抽象层

适用于关系型数据库的数据库抽象层及ORM(Object Relation Mapping),适用于Flask有:

3.2 适用于NoSQL数据库的数据库抽象层

NoSQL数据库非常多,MongoDB是其中一种文档型的NoSQL数据库,由于MongoDB天生就是为互联网开发服务的,而我只用Flask + MongoDB 做过开发,下面仅列出MongoDB的抽象层:

4. Flask 常用库

一个强大的框架不仅要练好自己的内功,还要具备各种趁手的武器和装备。Flask 易于扩展,为自己营造了优秀的生态环境,Flask生态下有各种各样的第三方库可供使用,这让我们开发自己的应用时,更高效、更专注,也更稳定。

下面列举一些我常用或了解的库,作为入门,熟悉了这些库,应该很容易开发一个健壮强大的应用了。

4.1 Flask 常用库列表

4.2 Flask 常用库详情

flask-script

为Flask提供强大的命令行操作,与Django shell类似。

flask-login

Flask user session 管理,提供诸如login_user, logout_user, login_required, current_user等功能,也是其他很多Flask库的基础。

flask-admin

为Flask应用提供操作简单且易于扩展的数据库管理界面,与Django自带的数据库管理app类似。

Flask-WTF

Flask与WTForms的集成,提供强大的Form安全和校验机制,与Django内置的Form功能类似。

flask-principal

Flask强大的权限管理机制,灵活性强,提供了一个权限管理的基础框架,是很多Flask权限相关扩展的基础。

flask-restful

一个强大的Flask RESTful框架,简单好用。

flask-api

相当于Django REST Framework的Flask版,是另一个强大的Flask RESTful框架。

Flask-Mail

Flask-Mail 为Flask应用添加了SMTP 邮件发送功能

Flask-User

Flask-User集成了用户管理相关功能,并允许对功能做定制性修改,其相关功能包括Register, Confirm email, Login, Change username, Change password, Forgot password等。

Flask-User 基于Flask-SQLAlchemy,NoSQL数据库无法使用。

flask-security

Flask-Security让开发者能够很快的为应用添加常用的安全机制,其整合了Flask-Login, Flask-Mail, Flask-Principal, Flask-Script等应用。其安全机制包括:

  • Session based authentication
  • Role management
  • Password encryption
  • Basic HTTP authentication
  • Token based authentication
  • Token based account activation (optional)
  • Token based password recovery / resetting (optional)
  • User registration (optional)
  • Login tracking (optional)
  • JSON/Ajax Support

flask-babel

Flask国际化和本地化扩展,基于Babel

flask-locale

为Flask应用添加语言包,与flask-babel类似。

转载自:https://www.jianshu.com/p/584fbff16946

pthon web框架flask(一)的更多相关文章

  1. pthon web框架flask(二)--快速入门

    快速入门 迫切希望上手?本文提供了一个很好的 Flask 介绍.假设你已经安装 Flask, 如果还没有安装话,请浏览下 安装 . 一个最小的应用 一个最小的应用看起来像这样: from flask ...

  2. 用Python手把手教你搭建一个web框架-flask微框架!

    在之前的文章当中,小编已经教过大家怎么搭建一个Django框架,今天我们来探索另外的一种框架的搭建,这个框架就是web框架-flask微框架啦!首先我们带着以下的几个问题来阅读本文: 1.flask是 ...

  3. python web框架Flask——csrf攻击

    CSRF是什么? (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click ...

  4. Python超级明星WEB框架Flask

    Flask简介 Flask是一个相对于Django而言轻量级的Web框架. 和Django大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug和模 ...

  5. 【Flask】微型web框架flask大概介绍

    Flask Flask是一个基于python的,微型web框架.之所以被称为微型是因为其核心非常简单,同时具有很强的扩展能力.它几乎不给使用者做任何技术决定. 安装flask时应该注意其必须的几个支持 ...

  6. web框架--flask

    flask介绍 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求 ...

  7. Python轻量Web框架Flask使用

    http://blog.csdn.net/jacman/article/details/49098819 目录(?)[+] Flask安装 Python开发工具EclipsePyDev准备 Flask ...

  8. Python Web框架——Flask

    简介 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理 ...

  9. Web 框架 Flask

    Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...

随机推荐

  1. 冒泡排序_c++

    冒泡排序_c++ GitHub 文解 冒泡排序是采用类似气泡上升的方式对数据进行排序. 例如: 我们这里有10个元素,具体数值随意,对每个数值标记上 1~10 的标记. 首先将标记为 1 的数值与标记 ...

  2. Core Data实例

    #import <UIKit/UIKit.h> #import <CoreData/CoreData.h> @interface CHViewController : UIVi ...

  3. DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描

    DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许禁止转载    系列目录连接 DB数据源之Spr ...

  4. 简单几行代码使用百度地图API接口分页获取信息

    首发于: 万能助手扩展开发:使用百度地图API接口分页获取信息_电脑计算机编程入门教程自学 http://jianma123.com/viewthread.aardio?threadid=426 使用 ...

  5. 小K的农场(差分约束,spfa)

    题目描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述: 农场a比农场b至少多种植了c个单位的作 ...

  6. MySQL数据库 : 基本语句

    mysql -uroot -p 登陆数据库 select now(); 显示当前时间 \q 退出 show databases; 显示数据库 create database 数据库名 charset= ...

  7. 纯js轮播图练习-3,类似于淘宝海报带小圆点轮播图

    基于js和css,跟着网上的视频教程,结合自己想要的效果,做出了一个类似于淘宝海报的效果. 如图:淘宝首页 自己做的: 代码: <!DOCTYPE html> <html> & ...

  8. vue-cli 3.0 使用axios配置跨域访问豆瓣接口

    vue-cli 3.0 配置axios跨域访问豆瓣接口 自己做的小demo 由于豆瓣api跨域问题,因此不能直接通过ajax请求访问,我们通过vue-cli提供给我们的代理 进行配置即可, 在根目录下 ...

  9. linux系统快速安装宝塔

    宝塔面板分linux面板和windows面板,安装宝塔linux面板首先要访问宝塔官网查看对应版本进行选择 宝塔面板的安装需要注意的地方有: 1.纯净系统 2.确保是干净的操作系统,没有安装过其它环境 ...

  10. 搭建Jupyter Notebook服务器

    昨天发了Jupyter的使用,补一篇Jupyter服务器的搭建~ 一.搭建Jupyter 1.安装 使用virtualenv建虚拟环境.在虚拟环境中安装jupyter.matplotlib等等需要的库 ...