学习任何一门开发语言都离不开框架, 一个框架就好比是一个毛坯房, 只需要我们装修就可以入住. 如果没有框架我们就只能一砖一瓦的去盖楼房了. 框架的种类很多, 具体选择要根据实际的业务情况. 下面就简单的介绍一下 Python 七款开源框架的优劣.
Django
Django 应该是最出名的 Python 框架, GAE 甚至 Erlang 都有框架受它影响. Django 是走大而全的方向, 它最出名的是其全自动化的管理后台: 只需要使用起 ORM, 做简单的对象定义, 它就能自动生成数据库结构, 以及全功能的管理后台.
优点:
开源框架, 有完美的文档支持
解决方案众多, 内部功能支持较多
优雅的 URL, 完整的路由系统
自助式的后台管理
缺点:
系统紧耦合, 想用喜欢的第三方库来代替是非常难的, 即使打了一些补丁用上了也会觉得非常别扭.
Django 自带的 ORM 远不如 SQLAlchemy 强大.
Template 功能比较弱, 不能插入 Python 代码, 要写复杂一点的逻辑需要另外用 Python 实现 Tag 或 Filter.
Flask
Flask 是一个用 Python 编写的轻量级 web 应用框架. 基于 Werkzeug WSGI 工具箱和 Jinja2 模板引擎. Flask 也被称为 "microframework", 因为它使用简单的核心, 用 extension 增加其他功能. Flask 没有默认使用的数 据库, 窗体验证工具.
优点:
Flask 比 Django 更灵活, 用 Flask 来构建应用之前, 选择组件的时候会给开发者带来更多的灵活性 , 可能有的应用场景不适合使用一个标准的 ORM(Object-Relational Mapping 对象关联映射), 或者需要与不同的工作流和模板系统交互.
缺点:
Flask 只是一个内核, 默认依赖于两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 工具集, 其他很多功能都是以扩展的形式进行嵌入使用.
Scrapy
Scrapy 是 Python 开发的一个快速, 高层次的屏幕抓取和 Web 抓取框架, 用于抓取 Web 站点并从页面中提取结构化的数据. Scrapy 用途广泛, 可以用于数据挖掘, 监测和自动化测试.
优点:
Scrapy 是一个功能非常强大的爬虫框架, 它不仅能便捷地构建 request, 还有强大的 selector 能够方便地解析 response, 然而它最受欢迎的还是它的性能, 既抓取和解析的速度, 它的 downloader 是多线程的, request 是异步调度和处理的. 这两点使它的爬取速度非常之快.
另外还有内置的 logging,exception,shell 等模块, 为爬取工作带来了很多便利.
缺点:
scrapy 是封装起来的框架, 他包含了下载器, 解析器, 日志及异常处理, 基于多线程, twisted 的方式处理, 对于固定单个网站的爬取开发, 有优势, 但是对于多网站爬取 100 个网站, 并发及分布式处理方面, 不够灵活, 不便调整与括展.
Tornado
Tornado 是一种 Web 服务器软件的开源版本. Tornado 和现在的主流 Web 服务器框架 (包括大多数 Python 的框架) 有着明显的区别: 它是非阻塞式服务器, 而且速度相当快.
优点:
Tornado 擅长为需要严密控制异步网络细节的应用程序提供基础架构. 例如, Tornado 不仅提供内置的异步 HTTP 服务器, 还提供异步 HTTP 客户端. 因此, Tornado 非常适合构建应用程序, 例如 Web scraper 或 bot, 它们并行查询其他站点并对返回的数据进行操作.
缺点:
模板和数据库部分有很多第三方的模块可供选择, 这样不利于封装为一个功能模块.
Web2py
web2py 是一个为 Python 语言提供的全功能 Web 应用框架, 旨在敏捷快速的开发 Web 应用, 具有快速, 安全以及可移植的数据库驱动的应用, 兼容 Google App Engine.
优点:
Web2py 最大的吸引力在于其内置的开发环境. 当设置 Web2py 实例时, 将获得一个 Web 界面, 实际上是一个在线 Python 应用程序编辑器, 可以在其中配置应用程序的组件. 这通常意味着创建模型, 视图和控制器, 每个都通过 Python 模块或 html 模板进行描述.
缺点:
Web2py 的一个重要限制是它仅与 Python 2.x 兼容. 首先这意味着 Web2py 无法使用 Python 3 的异步语法. 如果你依赖于 Python3 独有的外部库, 那么你就不走运了. 但是, 正在开展使 Web2py Python3 兼容的工作, 并且在撰写本文时它已接近完成.
Weppy
Weppy 感觉就像 Flask 的简约风格和 Django 的完整性之间的中间标记. 虽然开发 Weppy 应用程序具有 Flash 的直接性, 但 Weppy 具有 Django 中的许多功能, 如数据层和身份验证. 因此, Weppy 适用于从极其简单到适度复杂的应用程序.
优点:
Weppy 的文档与框架本身具有相同的风格. 它干净, 可读, 并且被人类消费. 除了通常的 "hello world" 应用程序示例之外, 它还包含一个很好的演练教程, 可以让你创建一个微博系统作为初学者项目.
缺点:
虽然 Weppy 有一个扩展机制, 但官方批准的附加组件列表很小, 远小于 Flask 的扩展目录.
Bottle
Bottle 可以被认为是一种迷你烧瓶, 因为它比其他 "微框架" 更加紧凑和简洁. 由于其占地面积最小, Bottle 非常适合包含在其他项目中或快速交付 REST API 等小型项目.
优点:
Bottle 不需要像其他框架那样多的文档, 但文档绝不是吝啬. 所有关键的东西都适合单个 (尽管很长) 的网页. 除此之外, 还可以找到每个 API 的完整文档, 如何在各种基础架构上进行部署的示例, 内置模板语言的解释以及一系列常见配方.
缺点:
Bottle 极简主义的一个后果是有些功能根本就不存在. 不支持表单验证, 包括 CSRF 保护等功能. 如果要构建支持高度用户交互的 Web 应用程序, 则需要自己添加它们.
来源: https://yq.aliyun.com/articles/661628