在Web开发领域,Python其实并没有像在机器学习和数据处理这个领域一样占有统治地位。不过鉴于Python在最近几年的强势地位,了解一下Python的web框架也挺有必要的。万一哪天我自己或者是客户“脑抽”了,真的要用Python来写web应用了呢?框架(Framework)让程序员的生活更容易,常用的功能和方法都打包进了框架里,直接从库里拿出来修改一下就用,确实是个省时省力,干活多快好省的好东西。
1. Why Python?
就不废话了,用一张图片和一张图表来解释吧。
- 人生苦短,Python是岸
- 日月蛇(Python)教,一统江湖之势
2. Python Web框架总结
总体来说Django和Flask是最最流行的Python Web框架,但是这不是说我们就可以忽略其他的框架。其实每一个框架都有其独特的设计和优势,在某些需求下,可能会更适合你的项目。
我们可以把这些框架分成两种类型: 1.全功能框架(或重型框架),这种类型的框架包括创建web应用所需要的大部分功能,通常可以用于构架需要完整功能和复杂设计的大型网站应用。2.轻量级框架,顾名思义,就是提供比较简单的网站构建功能,通常用于简单的,或者是小型的网站应用。
全功能框架
Django
Django应该是最流行的Python Web框架了,没有之一。而且其包含了创建应用需要的几乎全部功能,给人的感觉是这个框架希望框架本身实现各种功能,而不是依靠其他的库来完成。比如Django集成了安全认证,URL Routing,模板引擎,ORM以及数据库Scheme映射。这使得Django非常强大,有很好的可扩展性,性能也非常好。Django支持 PostgreSQL, MySQL, SQLite, Oracle和其他第三方数据库。其ORM功能支持多数据库之间的转换。
总之Django的设计优秀,结构合理,性能出众。适合不同规模的网站,在2020年,Django会加入对机器学习的支持,同时携Python迅猛发展势头,很有可能会成为今年使用者增长最快的Web框架。
Pyramid
Pyramid是一个在2010年就诞生的框架,其目标是简化web开发的复杂性。最新的版本是1.10,这已经是其第10个正式版本了。这个框架可以用于复杂的应用开发,也适用轻量级应用。Pyraid的开发社区还是比较活跃的。版本更新频繁,各技术群的讨论也是非常热烈的。
TurboGears
TurboGear是一个开源和数据驱动的程序框架,它是建构在很多不同的中间件和库的基础上,实际上这个框架试图把其他的Python框架中最好的组件融入其中。TurboGear允许开发者能够快速搭建数据驱动的网站应用。它有非常好用的模板引擎,对聚合的支持,功能强大而灵活的ORM工具,而且自带了大量的小代码片段,可以让开发更容易。
现在TurboGear的社区正在致力于开发一个简化(瘦身)版的TurboGear框架,这将会给大家带来一个更加简单易用的框架。
Web2py
这个原先是作为一个教学用的项目被开发出来,自带IDE工具,为了简化使用,其没有项目级的配置文件。Web2Py有一个内置的ticket系统,只要出现错误就会生出ticket,用来追踪运行时的问题。
这个项目的社区和邮件列表并不活跃
轻量级框架
Flask
目前为止,Flask是最流行的Python轻量级Web框架。这个框架是受到Sinatra Ruby的启发而开发出来的。 Flask基于Werkzeug WSGI toolkit以及 Jinja2 模板。
Flask的目的是要建立一个非常稳定和可靠的Web应用的基础系统,我们可以使用Flack再加上各种插件,扩展和其他模块,能够构建功能强大的网站和应用。事实上,如果Django不适合的应用类型,使用Flask基本上是Python Web开发的默认选择。
Flask也是一个在2010年启动的开源项目,到目前为止已经更新了27个版本,由于历史比较长,有些早期的扩展已经不被支持,文档也不再更新。需要在网络上找到最新的文档和功能。
Bottle
Bottle是一个轻量级的框架,最初是设计为一个API框架,整个Bottle框架是在一个源文件上。没有引用任何Python标准库。建议是如果使用Bottle,最好是非常小的程序,最好小于500行代码并且没有特殊的需求。
CherryPy, Falcon, Hug, FastAPI - 极为小众,就不介绍了。读者有兴趣可以自己查看
异步框架
以下两个开源框架用于处理高并发的应用,可以用于需要解决C10K问题(10000+并发的场景)
Sanic
Sanic是基于uvloop开发的,用于创建高并发异步Http请求的应用,必须使用Python3.5+,兼容Python3.5+的async/await方法,提供非阻塞的异步访问功能。Sanic是一个非常流行的异步框架。提供了routing, middleware, cookies, versioning, static files, blueprints, class-based views, 以及sockets的功能。不过比较可惜的是并没有提供模板引擎,也没有内置的数据库支持功能。
在一个Benchmark测试中,Sanic单进程和100连接的情况下,最高每秒同时并发处理33542个请求,平均时延2.96ms。
Tornado
Tornado是一个Python web框架加上异步网络处理库,用于大流量的网络应用开发。使用非阻塞I/O,目标能够处理C10K网站。如果配置合理,Tornado框架的网站应用能够轻松应对10000+并发的流量。
Tornado的流行程度介于Django和Flask之间,如果你需要一个web应用,同时也要支持高并发,那Tornado是最好的选择
文章评论