今天聊下PythonWeb框架,PythonWeb框架大致分成三类,分别是Full-StackWeb框架、NonFull-StackWeb框架、Asynchronous异步框架。
什么是Web框架
框架的意思就是把基础的,常用的功能都写好了。比如:URL分发(路由)、数据库读写(ORM)、表单,admin后台管理等,你只需要理解怎么调用这个框架,让你把精力放在业务逻辑实现上。
框架怎么分优劣
我们通常说的某某框架用起来舒服,用起来方便,是基于哪些考虑的呢?
我相信不同的开发人员说出的原因是不一样的。有的喜欢功能强大的框架,有的喜欢易上手的框架,有的喜欢小巧,配置灵活的框架。
有的开发者喜欢框架功能很全,不用自己造轮子,比如Django框架,它提供的功能非常全面,比如(cache、session、登陆、auth授权等等),和它强大的中间件,提供全方案Web开发支持。我们把这种框架叫做Full-StackWeb框架。
当然功能强大和全面的反面就是有点复杂(相对的),有点臃肿,不太灵活。所以Django上手要慢一点,自己造一个轮子替换Django某些内置功能或者使用第三方功能时不太灵活。
有的喜欢框架小巧,灵活,就像Flask框架一样。跟Django相反,Flask小巧、灵活,它的很多功能需要开发者以插件的形式向里安装,你也可以自己定制。这类不提供全方案开发支持的框架,我们叫做NonFull-StackWeb框架。
有的喜欢速度,喜欢框架本身的速度很快,喜欢I/O性能吞吐高并发,像Tornado和Sanic框架。它们是异步框架,I/O性能相对就高一些。当然异步编程的理解难度要大一点。
上面解释了什么是Full-StackWeb框架、NonFull-StackWeb框架和Asynchronous异步框架。下面具体介绍这三个下面的代表框架。
一、Django
Django是Full-StackWeb框架的代表,功能非常全面和成熟,开发文档很完备。它在PythonWeb开发框架的占有率应该是第一。Django的宗旨就是尽可能的提供所有功能,让你用尽可能少的代码完成业务。官方的说法是,如果你的开发日期非常紧,那么选用Django是正确的做法。我们自己开发的项目也全都选用的Django。
缺点:
在urls.py里配置URL路由有点麻烦;
模板不能像php一样在模板插代码;
数据库ORM组装出来的sql语句性能较差;
二、Flask
FlasK算是NonFull-StackWeb框架代表,是一个轻量级的WebFramework,它在中国的应用其实挺广的。它的设计目的是帮助构建一个稳定的Web基础应用。它的灵活性体现在,它的模块化设计可以轻松适合开发者的需求。Flask跟Django比起来,你可以自己造轮子,也可以是以插件的形式使用第三方库。使用Restfulrequest的风格,很适合开发webapi,Flask也更加pythonic。
今天正好是愚人节,其实Flask是在年4月1日愚人节这天发布的,作者本意是想在这一天整蛊一番的,谁知Flask在后来却越来越火了。
三、Tornado
Tornado其实也是NonFull-StackWeb框架。因为它支持异步,所以就单独说一下。
跟上面Django和Flask比起来的话,好像没啥可说的了,就是IO性能优秀。官方说能支持1万个并发请求。适合一些高并发项目。
因为一些原因,我对Tornado的印象不太好。16年的时候公司收购了一个项目,然后我去杭州接手这个项目的技术部分,系统是用Tornado开发的。团队是从杭州大厂出来的,设计得非常繁复,说是要支持4万并发的业务。但是到我们买的那天,业务连4千并发都不到。接下来的一年公司为这个项目付出了很大代价。
当然在Python3时代,异步框架还有其他的,比如Sanic,性能测试对比显示,Sanic比Tornado快几丢丢。我正在猿人学网站上写Sanic教程,感兴趣的可以点阅读原文去看看。
说了这么多,如何选择PythonWeb框架?
如果你要开发一个大型项目,比如电商系统,需要各种各样的功能都具备,那么使用Full-StackWeb框架是第一选择。如果是一个像内容系统,功能有限,不需要面面俱到,那么用NonFull-Stack是第一选择。
PythonWeb框架大约有30多种,我介绍了几个典型的和运用面比较大的,上面三种在国内的公司中也是运用比较广泛的,能熟练用其中一种做开发,应该可以找到个web开发工作。
PythonWeb相关延展阅读:
简说PythonWeb异步框架
深入了解Python的异步IO:概念和历史
Python异步IO系列:认识asyncio
Python异步IO系列:协程走起来!
一个十年Python码奴与运营汪的结合体
长按扫码