由于Python具有简单的语法,丰富的库,易于开发和测试自动化等优点,其受关注程度日益突出,越来越受到程序员和大公司的青睐。它适合开发各种项目,从金融和银行解决方案到旅行预订平台。无论是一个功能有限的简单网站,一个API还是一个包含机器学习算法的复杂解决方案,项目的复杂度都可以从零提高2的n次方。

目前Python框架可以分为全栈、微小和异步三大类。

yyyy

  • 全栈框架预先包含了构建应用程序所需要的组件。这其中就包括了模型视图(MVC),对象关系映射(ORM),模板引擎和路由。全栈框架可以用于开发任何类型的应用程序,但一般用于大型项目。
  • 对于小型项目,微框架可以满足基本要求。虽然可能会缺少某些功能,但可以进行额外拓展。
  • 对于异步编码并没有很多异步框架支持。Python异步框架使用asyncio库,并且可以处理大量并发连接。

全栈框架

对于全栈框架主要介绍一下Django、Pyramid、TurboGears、Web2Py和CubicWeb

Django

官方网站

Django是一个重量级的全栈框架,其重点是使开发过程更高效和快速,鼓励开发人员最小化代码并减少冗余。

框架功能

  • 数据库版本控制
  • 模板引擎
  • 对象关系映射器(ORM)
  • URL路由
  • 支持网络服务器
  • 各种现成的库
  • 支持身份验证
  • 支持国际化

优点:

  • 功能完善、要素齐全:自带大量常用工具和框架(比如分页,auth,权限管理), 适合快速开发企业级网站。
  • 完善的文档:经过十多年的发展和完善,Django有广泛的实践案例和完善的在线文档。开发者遇到问题时可以搜索在线文档寻求解决方案。
  • 强大的数据库访问组件:Django的Model层自带数据库ORM组件,使得开发者无须学习SQL语言即可对数据库进行操作。
  • Django先进的App设计理念: App是可插拔的,是不可多得的思想。不需要了,可以直接删除,对系统整体影响不大。
  • 自带台管理系统admin:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。
  • Django debug信息详尽: 很容易找出代码错误所在。

缺点:

  • 大包大揽: 对于一些轻量级应用不需要的功能模块Django也包括了,不如Flask轻便。

  • 过度封装: 很多类和方法都封装了,直接使用比较简单,但改动起来就比较困难。

  • 性能劣势: 与C, C++性能上相比,Django性能偏低,当然这是python的锅,其它python框架在流量上来后会有同样问题。

  • 模板问题: django的模板实现了代码和样式完全分离,不允许模板里出现python代码,灵活度对某些程序员来说可能不够。

Pyramid

官方网站

Pyramid以其高效率和快节奏的开发能力而出名。Pyramid 的灵感来源于 Zope、Pylons 1.0 和 Django ,最终,Pyramid 向它们各自借鉴一些概念和特性并组成一个独特的框架。

Pyramid is a small, fast, down-to-earth Python web framework. It is developed as part of the Pylons Project. It is licensed under a BSD-like license.

优点:

  • 灵活且易于定制
  • 轻松使用Ajax请求。由于XHR视图和装饰器,将Ajax请求发送到所需位置很简单。
  • 支持SQLAlchemy

TurboGears

官方网站

TurboGears是一个开源框架,用于快速开发数据驱动的Web应用程序。如果您要开发需要数据库连接的应用程序,那么这是一个不错的选择,因为TurboGears支持SQLAlchemy,Genshi,WebOb和Repoze等工具。

特点

  • 水平数据分区
  • 与MochiKit JavaScript库集成
  • 功能装饰器
  • 支持多个数据库
  • 支持MVC架构
  • Tosca小部件
  • PasteScript模板
  • FormEncode的验证支持

优点:

  • 多功能性。尽管它是一个微框架,但Turbogears易于扩展到全栈解决方案。您可以轻松地将原型组合在一起,然后将其扩展到复杂的,成熟的应用程序。
  • 内置可扩展的可插拔应用程序。可以创建自己的插件模块来替换或扩展框架中的现有模块。

Web2Py

官方网站

Web2Py是具有基于Web的IDE(集成开发环境)的可伸缩框架。web2py 是一个为 Python 语言提供的全功能Web应用框架,只在敏捷快速的开发 Web 应用,具有快速、安全以及可移植的数据库驱动的应用,兼容 Google App Engine。

特点

  • 向后兼容
  • 基于角色的访问控制
  • 内置数据安全性
  • 支持MVC架构
  • 多协议可读性
  • 支持国际化

优点:

  • 灵活,强大且可扩展。它具有有效开发所需的足够功能,但也可以与外部库集成。
  • 可维护高
  • 社区活跃度高

缺点:

  • 不灵活的插件系统
  • 数据模型加载系统的管理比较困难
  • 非正统的设计模式
  • 不支持Python 3

CubicWeb

官方网站

CubicWeb 是一个语义Web应用程序框架。

特点:

  • 多数据库支持
  • 资源描述框架(RDF)支持
  • Mercurial和Subversion后端存储
  • 可重复使用的组件
  • Web本体语言(OWL)
  • 通过选择+视图机制半自动生成文本,JSON,XML或XHTML

优点:

  • 可重复使用的多维数据集
  • RQL查询(RQL或关系查询语言是一种用于查询关系的清晰语法)

微框架

主要介绍以下几种微框架:

CherryPy

官方地址

CherryPy一套比较简单的 WEB 开发框架,只含有 WEB 开发框架,是开发数据访问或者模板技术的理想选择。它快速,易于使用,并提供了多种现成的解决方案,可以处理几乎所有类型的项目。

特点

  • 内置插件系统
  • 内置的支持测试和性能分析
  • 提供符合HTTP / 1.1的WSGI线程池化Web服务器
  • 支持多个同时的HTTP服务器
  • 良好的配置系统

优点:

  • 提供一个可用于生产环境的WSGI服务器
  • 提供的调度器模式支持广泛的功能

缺点:

  • 可供参考的文档有限

Bottle

官方网站

Bottle是一个快速,简单,轻量级的 Python WSGI Web框架。单一文件,只依赖 Python标准库 。使用Bottle,所有开发都在一个bottle.py文件中进行,这既有好处也有缺点。

特点:

  • 支持外部模板引擎
  • 内置HTTP服务器
  • 对WSGI的支持
  • URL参数支持
  • 插件支持不同的数据库。

优点:

  • 灵活性较高,支持小型网站

缺点:

  • 仅适用于小型网络应用
  • 一个小社区
  • 有限的文档和示例
  • 仅依赖于Python标准库

Falcon

官方网站

Falcon是开发REST API的不错选择。它使您可以使用简洁的设计来构建应用程序,而无需加载大量依赖项来构建HTTP API。

特点:

  • Cython支持
  • 可扩展且高度优化的代码库
  • 惯用的HTTP错误响应
  • 直观的路由
  • 通过WSGI帮助器和模拟进行单元测试
  • 前期的异常处理

优点:

  • 专为REST API设计。该框架用于开发REST API,并帮助开发人员做出某些设计选择,而对于通用框架而言,这是不可能的。

  • 轻巧,依赖性最小。Falcon仅使用标准库。

Dash

官方网站

Dash是构建分析型Web应用程序的好选择,尤其是在您的项目基于数据科学且您对Web开发机制不感兴趣的情况下。Dash应用程序在Flask上运行,并使用HTTP请求来传递JSON包,并且前端组件由React呈现。Flask还用于扩展Dash的功能。

特点:

  • 错误处理(Dash部署服务器)
  • 高度定制
  • LDAP集成(Dash部署服务器)
  • 插件支持
  • 捆绑UI控件的简单界面,包括下拉菜单,图形和滑块
  • URL路由(Dash部署服务器)

优点:

  • 无状态后端。Dash允许您创建无状态Web服务,因此很容易扩展应用程序可以服务的用户数量。通过创建更多工作进程使之成为可能,以便可以将请求发送到任何可用的进程。

  • Dash组件。Dash使用React.js渲染组件,并包括一个插件系统,您可以使用它与React一起创建自己的Dash组件。

  • 多用户状态。Dash使多用户可以访问在此框架中制作的应用程序。这意味着多个用户可以具有独立的会话。

缺点:

  • 在实际中可能需要比Dash的默认组件更复杂的组件
  • 将不得不从React移植组件或编写自己的组件
  • 可能会遇到结构问题,因为必须分别为每个输出提供函数

Flask

官方网站

Flask是一个WSGI框架,可以使您从简单的应用程序过渡到复杂的平台。它基于Werkzeug WSGI工具箱和Jinja2 模板引擎。它使开发人员可以自由选择要使用的库和工具。为此,Flask由其社区开发了许多扩展。

特点:

  • 内置开发用服务器和debugger
  • 集成单元测试(unit testing)
  • RESTful request dispatching
  • 使用Jinja2模板引擎
  • 支持secure cookies(client side sessions)
  • 100% WSGI 1.0兼容
  • Unicode based
  • 详细的文件、教学
  • Google App Engine兼容
  • 可用Extensions增加其他功能

优点:

  • Flask确实很“轻”,Flask自由、灵活,可扩展性强,第三方库的选择面广,开发时可以结合自己最喜欢用的轮子,也能结合最流行最强大的Python库。
  • 入门简单,即便没有多少web开发经验,也能很快做出网站。
  • 非常适用于小型网站。
  • 非常适用于开发web服务的API。
  • 开发大型网站无压力,但代码架构需要自己设计,开发成本取决于开发者的能力和经验。
  • 各方面性能均等于或优于Django。
  • Flask灵活开发,Python高手基本都会喜欢Flask,但对Django却可能褒贬不一。
  • Flask与关系型数据库的配合使用不弱于Django,而其与NoSQL数据库的配合远远优于Django。
  • Flask比Django更加Pythonic,与Python的philosophy更加吻合。

缺点:

  • 对于大型网站开发,需要设计路由映射的规则,否则导致代码混乱。

Hug

官方网站

Hug是用于在Python3上开发API的API微框架,其构建时考虑到了最小的资源消耗。它可以通过CLI或HTTP在本地进行快速便捷的开发。

特点:

  • Annotation来做validation的验证方案
  • 遵循“一次编写,随处使用”的理念
  • 内置版本管理
  • 支持自动文档

优点:

  • 简化API开发

使用Hug,您可以一次创建一个API,然后在任何需要的地方使用它。它还提供了多个接口,这使得开发API变得更加简单。

  • 自动化文档生成器

Hug具有使用docstrings和type批注自动生成API文档的功能,从而节省了您自己编写时间。

MorePath

官方网站

MorePath是一个模型驱动的框架,具有最小的安装空间。它的主要重点是可扩展性和可重用代码。MorePath还允许创建REST Web服务。

特点:

  • 通用视图和用户界面
  • 超链接生成
  • RESTful架构
  • 路由到模型
  • 通用扩展和覆盖机制

优点:

  • MorePath有详细的用户指南和实施示例。关于如何处理框架中的不同任务的文章和教程也很多。
  • 与其他Python框架一样,MorePath支持可重用的代码

Pycnic

官方网站

Pycnic是支持Python3的独立框架。它很小,针对基于JSON的API进行了优化。Pycnic速度很快,仅用于创建Web API。

特点:

  • 内置错误处理
  • 能够处理基于JSON的请求
  • 处理路由
  • 支持cookie

优点:

  • 简单灵活

异步框架

AIOHTTP

官方网站

AIOHTTP是一个Python 3.5+框架,一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。

特点:

  • 将查询重定向到函数
  • 支持客户端WebSocket和服务器WebSocket
  • 可插拔路由
  • 支持中间件

Sanic

官方网站

Sanic是一个开放源代码框架,用于处理异步请求以实现快速HTTP响应。它与Python 3.5中的await和async函数兼容,从而提高了速度并提供了非阻塞功能。

特点:

  • 不同类型的日志记录,包括访问和错误
  • 基于类的视图
  • 具有易于应用的装饰器的处理程序支持
  • 插件支持
  • 支持在应用程序内进行子路由的蓝图
  • 用于修改配置对象的点符号

Tornado

官方网站

Tornado是一个异步框架和网络库,可以通过使用无阻塞网络I / O扩展多个连接。对Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个理想框架。 特点:

  • 启用第三方身份验证和授权方案
  • 网络模板
  • 高品质的输出
  • 支持本地化和翻译
  • 实时服务
  • 支持用户认证