Python的Web框架介绍

 前言Python的便利性和多功能性意味着它几乎被用于构建各行各业的软件 。一个主要的利基是web服务,Python的开发速度和灵活性使其可以很容易地快速建立和运行网站 。正如您可能猜到的那样,Python在web框架中为您提供了大量的选择和自由度,无论大小 。毕竟,不是每个web项目都需要是企业级的 。大多数应该能足够完成工作就可以了,而不是追逐更大 。本文将8个最知名的Python框架,它们强调简单性、轻量级交付,接下来就具体点地了解下这些框架 。
1. BottleBottle(http://bottlepy.org/)可以被认为是一种迷型Flask,因为它甚至比其他的“微框架”更紧凑和简洁 。由于Bottle占用的空间很小(最小化封装),所以它非常适合包含在其他项目中,或者用于快速交付像REST APIs这样的小项目 。(后面会讨论Flask 。)

Python的Web框架介绍

文章插图
 
Bottle的整个代码库都可以放在一个文件中,并且完全没有外部依赖关系 。即便如此,Bottle还是配备了足够的功能来构建常见的web应用程序,而不需要依赖外界的帮助 。
Bottle中的路由系统将url映射到函数,其语法与Flask几乎完全相同 。应用中你也不会被局限于一组硬连接的路径,而是可以动态地创建它们 。请求和响应数据、cookie、查询变量、POST操作的表单数据、HTTP报头和文件上传都可以通过Bottle的对象访问和操作 。
每一项能力的实现都很注意细节 。例如,对于文件上传,如果文件的命名约定与目标文件系统冲突(例如在windows中文件名中的斜杠),则不必重命名文件 。Bottle可以帮你做到这一点 。
Bottle包含有它自己的简单html模板引擎 。同样,尽管模板引擎很小,但它具有所有的基本功能 。模板中包含的变量默认使用安全HTML渲染;同时你必须指出,哪些变量是安全的,以便按照字面意思重新生成 。如果您愿将Bottle的模板引擎换为另一个模板引擎,比如Jinja2,那么Bottle可以让您轻松地这样做 。我更喜欢与Bottle捆绑的简单模板系统;它速度快,语法朴实无华,并且允许您在不太困难的情况下混合代码和模板文本 。
Bottle甚至支持多个服务器后端 。它自带了用于快速测试的内置迷你服务器(内置了开发服务器),而且还支持通用的WSGI、各种与WSGI兼容的HTTP服务器,如果需要,也可支持普通的旧式CGI 。比如,在Bottle中的“Hello World”程序:
from bottle import route, run, template @route('/hello/<name>')def index(name):return template('<b>Hello {{name}}</b>!', name=name) run(host='localhost', port=8080)运行此脚本或将其粘贴到Python控制台,然后将浏览器指向
http://localhost:8080/hello/world 。就这样实现了编程中“经典” 。
与其他框架相比,Bottle不需要那么多的文档,但是它的文档也绝不少 。所有的关键内容都适用于单页面(虽然很长的) 。除此之外,您还可以找到每个API的完整文档、在各种基础设施上部署的示例、对内置模板语言的解释和大量常用方法 。
与Flask一样,您可以手动或通过插件扩展Bottle的功能 。Bottle插件远没有Flask插件那么多,但是拥有着一些有用的部分,如与各种数据库层的集成和基本的用户身份验证 。对于异步支持,Bottle可用现有的异步运行的服务器适配器,比如aiohttp/uvloop,但是sync/await不是原生支持 。
Bottle的极简设计的一个后果就是有些东西根本就不存在 。表单验证,包括CSRF(cross-site request forgery,跨站点请求伪造)保护特性没有包括在内 。如果您想构建一个支持高度用户交互的web应用程序,您需要自己添加这种支持 。
Bottle的另一个问题是发展已经迟滞很久了,最新版本是0.12,最开始是在2013年发布的,后又小版本更新(最新稳定版是2019年12月发布的0.12.18,开发中的0.13版还没正式发布) 。也就是说,Bottle将继续被维护,并且它的开发版本仍然可以用于生产 。开发人员打算交付新的版本,以摆脱对Python的遗留版本的支持 。
关于Bottle下载与安装
使用pip install bottle安装最新的稳定版本,或者将bottle.py(不稳定)下载到您的项目目录中 。除了Python标准库之外,Bottle没有硬依赖项 。Bottle支持Python 2.7和Python 3 。
注意,自0.13版本开始不推荐在Python 2.5和2.6下使用Bottle,此版本去掉了对它们的支持 。
概要总结一下:Bottle是一个快速和简单的微型框架,用于小型web应用程序 。它提供了url参数支持、模板、内置HTTP服务器和许多用于第三方WSGI/HTTP- Server和模板引擎的适配器服务于请求分派(路由)——所有这些都在一个文件中,除了Python标准库之外没有其他依赖关系 。


推荐阅读