今天,有着大量的 Python 框架,它们可以让 web 应用的开发更轻松。这些框架把不同的模块集成在一起,让你更快的构架程序,而不用关注一些细节(例如 socket 和协议),框架提供了需要的所有功能。
Python 的 Web 框架也分成重量级和轻量级,重量级的典型代表有 Django,轻量级的有 Flask、Tornado 等等。
重量级框架
Django
Django 已经成为 Python 最广泛部署的,用于创建 Web 应用程序的框架之一。Django 配备了你可能需要的大部分组件,因此它倾向于构建大型应用程序而不是小型应用程序。经过多年在版本 1.x 后,Django 最近在小数点的左边创建了一个版本。Django 2.0 中最大的变化是框架现在只适用于 Python 3.4 及更高版本。理想情况下,你应该使用 Python 3.x,所以使用 Django 的 1.x 分支的唯一原因是你遇到了旧版本的 Python。
Django 吸引力的一个关键部分是部署速度。因为它包含了开发普通 Web 应用程序所需的许多部分,所以可以快速行动。路由,URL解析,数据库连接(包括 ORM),表单验证,攻击保护和模板都是内置的。
有关 Django 的更多信息,请参见 Django 教程。
官方网址:https://www.djangoproject.com/
CubicWeb
CubicWeb 被称为“一个支持重用和面向对象设计的语义Web应用程序框架”。这是一个有趣的系统,强调使用抽象和可重用的代码块称为“多维数据集”,但对于某些开发人员来说可能过于抽象或特殊。
CubicWeb 的最重要的功能是其代码的可重用性,由一个个代码单元组成。它灵活又强大,并且还有一些特别的功能,包括RQL查询语言和支持有效编码的语义视图功能。这是语义Web应用程序的最佳解决方案,并且提供理想的环境。
官方网址:https://www.cubicweb.org/
Web2py
在 Ruby 世界中,Ruby on Rails 是事实上的 Web 框架。DePaul 大学计算机科学教授 Massimo Di Pierro 受到 Rails 的启发,用 Python 创建一个易于设置和使用的 Web 框架。结果是 Web2py。
Web2py 最大的吸引力在于其内置的开发环境。当设置 Web2py 实例时,将获得一个 Web 界面,实际上是一个在线 Python 应用程序编辑器,可以在其中配置应用程序的组件。这通常意味着创建模型,视图和控制器,每个都通过 Python 模块或 HTML 模板进行描述。一些示例应用程序随附 Web2py。可以将它们分开来查看它们的工作方式,或将它们用作启动器模板来创建自己的应用程序。
weppy
weppy 感觉就像 Flask 的简约风格和 Django 的完整性之间的中间标记。虽然开发 weppy 应用程序具有 Flash 的直接性,但 weppy 具有 Django 中的许多功能,如数据层和身份验证。因此,weppy 适用于从极其简单到适度复杂的应用程序。
Zope2
Zope 不适用于简单的 RESTful API(如 Bottle 或 Flask),甚至不适用于具有交互性的基本网站(如 Django)。相反,它适用一个完整的企业级应用程序服务器堆栈,类似于Java产品。
轻量级框架
Flask
关于 Python 中的 Web 框架的大多数讨论都是从 Flask 开始提到的,并且有充分的理由。Flask 是一个成熟的,易于理解的框架,广泛使用且非常稳定。使用 Flask 进行轻量级 Web 项目或基本 REST API 几乎不可能出错,但如果试图构建更大的东西,将面临繁重的工作。
Flask 的核心吸引力在于其进入门槛低。一个基本的“hello world” Flask应用程序可以在少于 10 行的 Python 中设置。广泛使用的 HTML 模板系统 Jinja2 附带了使渲染文本变得容易的框架,但是 Jinja2 可以换成任何数量的其他模板引擎(例如 Mustache),或者可以自己动手。
关于 Flask 的详细信息,请参照 Flask 教程。
Tornado
Tornado 是针对特定用例的另一个小框架。Tornado 专为构建异步网络应用程序而设计,非常适合创建同时打开大量网络连接并使其保持活动状态的服务,即涉及 WebSockets 或长轮询的任何内容。
像 Bottle 或 Falcon 一样,Tornado 省略了与其核心目的无关的特征。例如,Tornado 有一个内置的模板系统,用于生成输出(以 HTML 或其他方式)和国际化,表单处理,cookie 设置,用户身份验证和 CSRF 保护的机制。但是它省略了类似于表单验证和 ORM 的功能,它们更适合面向用户的 Web 应用程序。
Tornado 擅长为需要严密控制异步网络细节的应用程序提供基础架构。例如,Tornado 不仅提供内置的异步 HTTP 服务器,还提供异步 HTTP 客户端。因此,Tornado 非常适合构建应用程序,例如 Web scraper 或 bot,它们并行查询其他站点并对返回的数据进行操作。
Bottle
Bottle 可以被认为是一种迷你烧瓶,因为它比其他“微框架”更加紧凑和简洁。由于其占地面积最小,Bottle 非常适合包含在其他项目中或快速交付 REST API 等小型项目。
Bottle 的整个代码库适合单个文件,并且绝对没有外部依赖性。即便如此,Bottle 还配备了足够的功能来构建常见的 Web 应用程序,而无需依赖外部帮助。
web.py
web.py 最初是由已故的 Aaron Swartz 创建的,并被用作 Reddit 的原始基础。尽管 Reddit 可能已经从 web.py 转移,但 web.py 继续由其他人维护,主要是 Anand Chitipothu。在范围和设计上,web.py 类似于 Bottle 和 Flask;你可以把它当作一个基本的骨架,然后在它上面构建,而不会感觉太受限制。
CherryPy
CherryPy 已经存在了超过 10 年,但并没有失去最初区分它的极简主义和优雅。
这个框架的前提是,除了只包含为 Web 页面提供服务所需的少量内容外,它应该尽可能地让人感觉它不像“web 框架”,而是像任何其他类型的 Python 应用程序一样。根据文件显示,Hulu 和 Netflix 等网站在制作中使用了 CherryPy,这可能是因为该框架提供了一个高度低调的基础。
Falcon
如果正在构建基于 REST 的 API 而不是其他任何东西,那么 Falcon 提供的绝对必要。它的设计精简而快速,几乎没有标准库之外的依赖关系。
Pyramid
小而轻,Pyramid 比 Django 更接近 Flask 甚至 Falcon。因此,它非常适合于将现有 Python 代码公开为 REST API,或者为开发人员完成大部分繁重任务的 Web 项目提供核心的任务。
wheezy.web
wheezy.web 是 Web 框架的 Flask/Bottle/Pyramid 模型,小巧轻便,专注于提供高速和高并发性。这个功能集的核心是小的,但它的创建者已经为它配备了各种必备功能。
Quixote
Quixote 是由美国全国研究创新联合会(CNRI,Corporation for National Research Initiatives)的工程师 A.M.Kuchling、Neil Schemenauer 和 Greg Ward 开发的一个轻量级 Web 框架。和几乎所有的开源项目一样,Quixote 也是为了满 足实际需要而出世的。
著名的豆瓣就是基于 Quixote 开发的。