Web开发是Python语言应用领域的重要部分,也是工作岗位比较多的领域。如果你对基于Python的Web开发有兴趣,正打算开始学习使用Python做Web开发,或者已经是一个Web开发者有工作需要,要做Web服务、自动化运维、数据的图形化展示等,那么学习一门基于Python的Web开发框架是必修课。
Python作为当前最火爆最热门,也是最主要的Web开发语言之一,在其二十多年的历史中出现了数十种Web框架,比如Django、Tornado、Flask、Twisted、Bottle和Web.py等,它们有的历史悠久,有的发展迅速,还有的已经停止维护。
一、基于Python的代表性Web框架
下面是一些比较有代表性的框架:
Django:
发布于2003年,是当前Python世界里最负盛名且最成熟的Web框架,最初被用来制作在线新闻的Web站点。Django的各模块之间结合得比较紧密,所以在功能强大的同时又是一个相对封闭的系统(依然是可以自定义的),但是其健全的在线文档及开发社区,使开发者在遇到问题时能找到解决办法。
Tornado:
一个强大的、支持协程、高效并发且可扩展的Web服务器,发布于2009年9月,应用于FriendFeed、Facebook等社交网站。它的强项在于可以利用异步协程机制实现高并发的服务。
Flask:
Python Web框架家族里比较年轻的一个,发布于2010年,它吸收了其他框架的优点并且把自己的主要领域定义在了微小项目上,以短小精干,简洁明了著称。
Twisted:
一个有着十多年历史的开源事件驱动框架。它不像前三种着眼于Web应用开发,而是适用从传输层到自定义应用协议的所有类型的网络程序的开发,并能在不同的操作系统上提供很高的运行效率。但是,目前对Python3的支持有限,建议使用Python2.7。
二、选择框架的原则
这么多的Web框架,我们没有那么多的精力全都学一遍,也不可能全部精通,必然要有所取舍,那么该如何选择呢?有哪些可以参考的原则呢?
下面的原则不一定正确,但可以作为参考:
选择更主流的框架。因为它们的文档更齐全,技术积累更多,社区更繁盛,能得到更好的帮助和支持。
选择更活跃的框架。关注项目在GitHub等环境中的更新频率、Issue和Pull Request的响应情况。如果一个项目长期没有更新,或者有一堆的问题需要解决但是没有得到响应,就不应该是你学习的对象。
选择能够满足需求的框架。没有最好的框架,只有更合适的框架。你所选择的Web框架不仅需要满足当前的需求,还要充分考虑项目发展一段时间后的情况,即前瞻性,避免盲目选择而导致将来推倒重来的情况。
选择时效性好的框架。在学习和使用框架的时候经常需要查阅和参考各种网络上的文章、博客和教程,但是需要注意他们的发表时间。有些框架的相关文章已经很老了,很久没更新了,应该放弃这种框架;有的框架一直以来都有不断的新文章、新博客出现,就是比较不错的选择。
选择入门友好的框架。这条只对新手适用。详细的框架文档、官方教程对新手来说都是极大的帮助和鼓励。
三、为什么选择Django?
首先介绍一下Django,Django具有以下特点:
功能完善、要素齐全:该有的、可以没有的都有,自带大量常用工具和框架,无须你自定义、组合、增删及修改。
完善的文档:经过十多年的发展和完善,Django有广泛的实践案例和完善的在线文档。开发者遇到问题时可以搜索在线文档寻求解决方案。
强大的数据库访问组件:Django的Model层自带数据库ORM组件,使得开发者无须学习其他数据库访问技术(SQL、pymysql、SQLALchemy等)。
灵活的URL映射:Django使用正则表达式管理URL映射,灵活性高。新版的2.0,进一步提高了URL编写的优雅性。
丰富的Template模板语言:类似jinjia模板语言,不但原生功能丰富,还可以自定义模板标签,并且与其ORM的用法非常相似。
自带后台管理系统admin:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。
完整的错误信息提示:在开发调试过程中如果出现运行错误或者异常,Django可以提供非常完整的错误信息帮助定位问题。
那么,我们根据前面的选择原则我们来逐条对比一下:
1.主流、活跃程度:
从Github的数据来看,Django的开发非常活跃,迭代速度也非常快。
2.是否可以满足需求:
Django以要素齐全、工具丰富、框架庞大著称,基本上别的框架有的它有,别的框架没有的它也有,如果Django满足不了需求,那么别的框架同样也一样。
3.时效性:
Django有很长的开发和实践过程,或早或晚的文档、教程、帮助、博客等等非常多,资料更新速度也很快,比如博主个人网站的Django教程,大家没事可以逛逛,–。
4.入门友好程度:
一个框架能否流行起来,对新手入门是否友好非常关键。Django在这一点做的非常好。
四、Django的不足
不能光说优点,也说说一些缺点:
框架庞大,被认为不够精简、捆绑的内容太多
其实我不认同这一条,我真不认为这是个缺点。
首先,对于新手,Django集成好的工具和部件,让你无须再费脑力去学习如何安装、调试、集成、兼容别的工具。Django帮你把它们都集成好了,而且保证兼容性、可用性和方便性,就好比联想一体机,开机即用,效率也高。而一些如flask的框架,虽然精简,但是你要自己安装各种工具、ORM、插件等等,好比DIY电脑,在用之前,要知道买什么配件,怎么搭配,怎么组装,怎么配置效率才高,将新手的热情大量消耗在非关键性的内容上。
其次,对于老手,Django也是开放的,你完全可以关闭不必要的功能,忽略不使用的组件,或者自定义希望的组件,包括ORM和Template在内,都可以自由选择。
因此,我认为Django系统庞大、捆绑工具不是问题。
在异步通信方面略有欠缺
从本质上来说,Tornado在异步协程机制实现高并发的服务上要更强一点。Django在这方面有追赶的目标,但这不是说Django就差到不能用了,对么?
五、基于Python进行Web开发的技术栈
想要熟练地使用Django进行Web开发,设计生产环境可用的,能够应对一定规模访问量的Web应用,开发者要学会的远远不止Django本身。Python基础、环境搭建、前端语言、API设计、网站架构、系统管理、持续集成、服务化、数据处理、并发处理等等,都是相关的知识领域,包括但不限于以下的内容:
熟悉Python语言
对前端的HTMLCSSJavascript比较熟悉
对网络基础,比如HTTP、TCP/IP等比较熟悉
熟悉数据库、缓存、消息队列等技术的使用场景和使用方法
日常能使用Linux或Mac系统工作(Windows属于标配)
有性能优化经验,能快速定位问题
除此之外,还要对业务有深刻理解,能够写出可维护性足够高的代码。当然,以上都是对经验丰富的开发者而言,对于新手刚入门者,我们朝着这个目标努力学习就好。
下面是基于Python的Web开发技术栈: