在学习Python过程中,如果学习Web开发,一般会涉及到Web框架,特别是对于新手,除了主流的Django和Flask,一般不会了解还有哪些框架更能适合自己。今天主要从Github的Star数量进行统计,将热门的开源Python Web框架做下简单的盘点,具体哪个框架适合,还需要根据具体场景做出选择。
热门Python Web Framework
排名 | 框架名称 | star数量 | 发布年份 | 简介 |
1 | django/django | 74.2k | 2005 | 提供了完整的MVC框架,内置了ORM、模板引擎、缓存等功能,适用于大型Web应用开发。 |
2 | tiangolo/fastapi | 65k | 2019 | 高性能的现代Python Web框架,基于Starlette构建,使用Pydantic作为数据验证库,同时支持异步操作和自动生成API文档等特性。 |
3 | pallets/flask | 65k | 2010 | 轻量级且灵活的Python Web框架,具有出色的扩展性和可定制性,只需一些简单的代码即可构建应用程序。Flask的核心思想是“微服务”,因此它不会像Django那样强制规定项目组织结构和应用程序架构。 |
4 | streamlit/streamlit | 28.7k | 2019 | 一个用于构建数据科学应用程序的Python框架,使得创建交互式数据分析和可视化变得更加容易和快速。Streamlit通过提供简单易用的API和实时预览功能,从而帮助用户快速迭代和进行快速原型设计。 |
5 | encode/django-rest-framework | 26.7k | 2013 | DRF是一个基于Django框架构建的Web API框架,它提供了多种序列化工具、认证机制、请求授权等功能,可以方便地构建出高质量的Web APIs。DRF还提供了诸多有用的扩展,如过滤器、分页、缓存等。 |
6 | tornadoweb/tornado | 21.3k | 2010 | 高性能的Python Web框架,支持非阻塞I/O操作,能够处理数以万计的并发连接,适用于构建高性能的Web服务器、Web应用程序或API等。 |
7 | plotly/dash | 19.7k | 2017 | 一个用于构建Web应用程序的Python框架,基于Flask框架和React.js组件,支持数据可视化、实时数据更新、交互式UI和复杂的布局等功能。Dash可以轻松地创建仪表盘、报告和交互式数据分析应用。 |
8 | sanic-org/sanic | 17.5k | 2016 | 基于Python 3.6+、asyncio和uvloop的Web框架,具有极高的性能,可以处理成千上万的并发请求。Sanic的API类似于Flask,但底层使用事件循环来实现异步操作。 |
9 | aio-libs/aiohttp | 14.1k | 2014 | 一个基于asyncio的HTTP客户端/服务器框架,支持WebSocket、HTTP/2和SSL/TLS等协议。Aiohttp执行速度极快,可以轻松处理大量的并发请求,适用于构建高效的Web应用程序和API。 |
10 | falconry/falcon | 9.3k | 2014 | 一个快速、稳健并且易于扩展的Python Web API框架,具有良好的性能和低延迟。Falcon的API类似于Django REST Framework,但是它更加轻量级,适用于构建小型到中型的Web APIs。 |
11 | bottlepy/bottle | 8.2k | 2010 | 一个轻量级的Python Web框架,没有任何依赖关系,提供路由、模板引擎、请求/响应对象等基本功能,适用于小型Web应用程序。 |
12 | hugapi/hug | 6.7k | 2016 | 快速而干净的Python Web API框架,具有出色的性能和轻松使用的API。Hug的API类似于Flask,但是它提供了更多的默认行为和错误检查。 |
针对以上框架做下简单的总结:
- 大而全:Django
- 小而美:Flask、sanic、bottle
- 异步支持高并发:fastapi、tornado、sanic、aiohttp
- 前后端分离(API开发):fastapi、django-rest-framework、falcon、hug
数据报表呈现:streamlit、dash
如果让我选择,我会选择斜率(增长率)最高的 FastAPI 与Streamlit 进行学习~
Django
Django 是一个由 Python 编写的开源全栈 Web 框架。它是一个功能强大、灵活、易于使用的框架,适用于各种类型的 Web 应用程序。
Django 具有以下特性:
- 使用模型-视图-控制器(MVC)设计模式,将应用程序逻辑与呈现逻辑分离,使开发人员可以专注于业务逻辑的实现。
- 提供丰富的功能集,包括数据库访问、表单处理、用户认证、安全性、国际化等。
- 具有良好的文档和社区支持。
Django 具有以下优点:
- 开发效率高:Django 提供了大量的功能组件和工具,可以帮助开发人员快速构建 Web 应用程序。
- 代码可维护性高:Django 采用了良好的设计模式和编码规范,可以帮助开发人员编写可维护的代码。
- 安全性高:Django 提供了全面的安全功能,可以帮助开发人员构建安全的 Web 应用程序。
Django 具有以下缺点:
- 学习曲线较陡:Django 提供了大量的功能和特性,对于新手来说可能需要一定的学习时间。
- 灵活性较差:Django 的设计理念是鼓励快速开发,因此灵活性可能不如一些其他框架。
Django 适用于各种类型的 Web 应用程序,包括:
- 博客、新闻网站等静态网站
- 电商网站、社交网站等动态网站
- 企业应用程序
- 后端 API
以下是一些使用 Django 开发的知名应用:
- The Washington Post
- Disqus
- Bitbucket
- Mozilla
FastAPI
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.8+ 并基于标准的 Python 类型提示。它是一个开源项目,基于 Starlette 和 Pydantic 库构建而成,提供了强大的功能和高效的性能。
FastAPI 的主要特性包括:
- 高性能:FastAPI 使用最新的 Python 特性和异步编程,提供了快速开发 Web API 的能力。在 benchmark 测试中,FastAPI 的性能与 js 和 Go 相当。
- 快速编码:FastAPI 的代码简洁明了,易于理解和维护。使用 FastAPI,您可以将功能开发速度提高约 200% 至 300%。
- 更少的错误:FastAPI 提供强大的数据验证功能,可以帮助您减少错误。在校验失败时,FastAPI 会自动生成清晰的错误信息,帮助您快速定位错误。
- 直观:FastAPI 提供自动生成的交互式 API 文档,可以帮助您快速了解 API 的功能。
FastAPI 的优点包括:
- 性能优异:FastAPI 使用异步编程,可以充分利用多核 CPU 的性能,在 benchmark 测试中,FastAPI 的性能与 js 和 Go 相当。
- 开发效率高:FastAPI 的代码简洁明了,易于理解和维护,可以帮助您提高开发效率。
- 错误率低:FastAPI 提供强大的数据验证功能,可以帮助您减少错误。
- 文档丰富:FastAPI 提供自动生成的交互式 API 文档,可以帮助您快速了解 API 的功能。
FastAPI 的缺点包括:
- 学习曲线较陡:FastAPI 提供了许多强大的功能,但也需要一定的学习成本。
- 生态系统尚不完善:FastAPI 是一个相对较新的框架,其生态系统还不如 Flask 或 Django 等成熟框架那么完善。
FastAPI 适用于构建各种 API,如果您正在寻找一个快速、易用且功能强大的 API 框架,那么 FastAPI 是一个不错的选择。
Flask
Flask 是一个由 Python 编写的轻量级 Web 框架。它是一个灵活、易于使用的框架,适用于中小型 Web 应用程序。
Flask 具有以下特性:
- 使用微框架架构,只提供核心服务,使开发人员可以自由地扩展和定制框架。
- 使用 Python 的标准库,开发人员可以快速上手。
- 具有良好的文档和社区支持。
Flask 具有以下优点:
- 开发效率高:Flask 的微框架架构使开发人员可以快速构建 Web 应用程序。
- 灵活性高:Flask 只提供核心服务,开发人员可以根据需要自由地扩展和定制框架。
- 学习曲线较低:Flask 使用 Python 的标准库,开发人员可以快速上手。
Flask 具有以下缺点:
- 功能集较少:Flask 只提供核心服务,因此功能集可能不如一些其他框架。
- 安全性较差:Flask 的设计理念是鼓励灵活性,因此安全性可能不如一些其他框架。
Flask 适用于中小型 Web 应用程序,包括:
- 博客、新闻网站等静态网站
- 小型电商网站、社交网站等动态网站
- 后端 API
以下是一些使用 Flask 开发的知名应用:
- Twitch
- Airbnb
- GitHub
- Spotify
Django 和 Flask 都是 Python 编写的 Web 框架,但它们具有不同的特点。Django 是一个功能强大、灵活、易于使用的全栈 Web 框架,适用于各种类型的 Web 应用程序。Flask 是一个灵活、易于使用的轻量级 Web 框架,适用于中小型 Web 应用程序。
在选择 Web 框架时,您需要考虑以下因素:
- 应用程序的规模和复杂性:如果您的应用程序规模较大或复杂,则需要选择功能强大的框架,如 Django。如果您的应用程序规模较小或简单,则可以选择灵活的框架,如 Flask。
- 开发人员的经验水平:如果您是初学者,则可以选择学习曲线较低的框架,如 Flask。如果您是经验丰富的开发人员,则可以选择功能集较丰富的框架,如 Django。
Streamlit
Streamlit 是一个用于构建数据科学应用程序的 Python 框架,使得创建交互式数据分析和可视化变得更加容易和快速。
特性:
- 简单易用:Streamlit 的 API 设计简单明了,无需编写 HTML 或 CSS 代码即可构建 Web 应用程序。
- 快速迭代:Streamlit 允许用户快速迭代和进行快速原型设计,可以直接从 Jupyter Notebook 进行导入和使用。
- 实时预览:Streamlit 支持实时预览功能,每次代码修改后自动刷新 Web 页面,使得开发更加高效。
- 数据可视化:Streamlit 提供多种数据可视化组件,例如图表、表格、地图等,支持各种第三方库,如 Matplotlib、Bokeh、Plotly 等。
- 组件库:Streamlit 内置了多个组件库,例如文本输入框、滑块、下拉菜单等,允许用户自定义控件。
优点:
- 简单易用:Streamlit 的 API 简单易用,无需编写 HTML 或 CSS 代码,非常适合初学者。
- 快速迭代:Streamlit 可以直接从 Jupyter Notebook 中导入,大大缩短了开发周期。
- 实时预览:Streamlit 支持实时预览功能,能够帮助用户快速调试和查看修改后的结果。
- 数据可视化:Streamlit 提供多样化的数据可视化组件,便于用户进行数据分析和可视化。
- 组件库:Streamlit 内置了多个组件库,能够帮助用户更快速地构建出复杂的 Web 应用程序。
缺点:
- 适用范围有限:Streamlit 更适用于构建数据科学应用程序,因此并不适用于所有类型的 Web 应用程序。如果需要构建更加复杂的 Web 应用程序,则可能需要考虑其他框架。
Django REST framework
Django REST framework(DRF)是一个基于 Django 框架构建的 Web API 框架,它提供了多种序列化工具、认证机制、请求授权等功能,可以方便地构建出高质量的 Web APIs。
特性:
- API 规范框架:DRF 支持常见的 API 规范框架,如 RESTful、JSON API 等。
- 序列化组件:DRF 内置了多个序列化组件,支持多种格式的数据输出和输入,比如 JSON、XML 等。
- 认证和授权功能:DRF 提供多种身份验证方法和权限控制,包括基本身份验证、令牌身份验证、OAuth2 等。
- 内置视图和渲染器:DRF 内置了多种视图类和渲染器,能够快速创建 API 视图。
- 分页功能:DRF 支持多种分页方式,例如限制记录数、游标分页和滚动分页等。
优点:
- 灵活度高:DRF 提供了一系列的可定制化选项,可以根据需求灵活调整功能。
- 强大的序列化组件:DRF 支持多种数据格式的序列化和反序列化操作,使得开发者在传输数据时更加方便,同时还能自动验证数据有效性,从而提高代码可读性和可维护性。
- 安全性好:DRF 的认证授权功能非常完备,支持多种身份验证和权限管理机制,保证数据的安全性。
- 文档友好:DRF 内置了文档生成器 Swagger 和 ReDoc,可以自动生成 API 文档,节省开发者的时间成本。
缺点:
- 学习曲线较陡峭:相对于 Flask 等其他 Python Web 框架,DRF 的学习曲线可能会更陡峭一些,需要投入更多的时间和精力进行学习和理解。
- 功能略显繁琐:DRF 提供了非常丰富的功能,但有时也可能造成一些不必要的繁琐。因此,在使用 DRF 时需要根据实际需求选择相应的组件和功能。
Tornado
Tornado 是一个基于 Python 的 Web 应用程序框架,由 FriendFeed 的工程师开发。它支持异步 I/O 操作,能够处理大量的并发连接。
特性:
- 高性能:Tornado 支持非阻塞式 I/O 操作,而不是传统的阻塞式操作,因此可以轻松处理成千上万的并发请求。
- 异步 I/O:Tornado 使用异步 I/O 来提高服务器的性能和扩展性。它利用 Python 3.5 中引入的 asyncio 库来实现非阻塞式 I/O 操作。
- WebSocket 支持:Tornado 内置了对 WebSocket 的支持,使得构建实时应用程序更加容易和高效。
- 轻量级:Tornado 的设计理念是尽量减少代码的复杂性和冗余性,因此它是一个轻量级的 Web 框架。
- 安全可靠:Tornado 内置了多种安全机制,如 XSS 和 CSRF 防御等,使得 Web 应用程序更加安全可靠。
优点:
- 高性能:Tornado 使用非阻塞 I/O 和异步编程模型,能够轻松地处理大量的并发请求。
- WebSocket 支持:Tornado 内置了对 WebSocket 的原生支持,使得构建实时应用程序非常方便。
- 安全可靠:Tornado 内置了多种安全功能,包括 XSS 和 CSRF 防御等,使得 Web 应用程序更加安全可靠。
- 轻量级:Tornado 设计简单,代码量相对较小,易于开发和维护。
缺点:
- 学习曲线较陡峭:Tornado 的学习曲线可能会比较陡峭一些。这是因为 Tornado 与其他 Web 框架有所不同,并且需要使用一些新的概念和技术。
- 功能略显单一:相对于 Django 或 Flask 等其他 Web 框架,Tornado 的功能相对单一,适合构建中小型 Web 应用程序并不适用于复杂的应用场景。
Dash
Dash 是一个用于构建仪表盘和 Web 应用程序的 Python 框架,基于 Flask 和 React.js 组件,支持数据可视化、实时数据更新、交互式 UI 和复杂的布局等功能。
特性:
数据可视化:Dash 提供了多种可视化组件,如图表、地图、表格等,它们可以使用 Plotly 等开源库进行定制。
- 实时数据更新:Dash 可以在页面上实时更新数据,无需刷新整个页面,这是因为它是基于 js 构建的。
- 交互式 UI:Dash 的界面非常灵活,支持用户交互和自定义控件,在最终渲染时会根据用户输入进行相应的响应。
- 复杂的布局:Dash 提供了多种嵌套和排列组件的方法,使得您能够创建复杂的布局,以展示各种类型的数据或信息。
优点:
- 快速开发:Dash 基于 Flask 和 js,使用 Python 语言,代码量较少,因此可以快速构建出复杂的 Web 应用程序。
- 数据可视化:Dash 内置了多种数据可视化组件,包括 Plotly 等开源库,使得数据分析和可视化更加容易和高效。
- 实时数据更新:Dash 可以实现实时数据更新,无需刷新整个页面,从而提高用户体验和响应速度。
- 适用范围广:Dash 支持多种应用场景,包括仪表盘、报告、数据分析和可视化、机器学习和人工智能等。
缺点:
- 学习曲线陡峭:Dash 的学习曲线可能有些陡峭,因为它需要同时掌握 Flask 和 js 的知识。因此,需要投入一些时间和精力进行学习和理解。
- 功能略显繁琐:Dash 内置了许多功能,有时候也可能造成一些不必要的繁琐。
Sanic
Sanic 是一个基于 Python 3.6+、asyncio 和 uvloop 的 Web 框架,具有极高的性能,可以处理成千上万的并发请求。Sanic 的 API 类似于 Flask,但底层使用事件循环来实现异步操作。
优点:
- 高性能:Sanic 使用 asyncio 和 uvloop 库实现非阻塞式 I/O 操作和事件驱动,可以轻易处理大量的并发请求。
- 异步 I/O:Sanic 支持异步 I/O 操作,可以利用 Python 3.6+ 中引入的 async/await 关键字来提高服务器的性能和扩展性。
- Flask-Like API:Sanic 的 API 设计类似于 Flask,使得开发者可以轻松上手,并且可以借助 Flask 的插件生态系统来扩展功能。
- 内置路由和模板引擎:Sanic 内置了路由和模板引擎支持,使得开发人员无需安装其他组件就可以构建出完整的 Web 应用程序。
缺点:
- 社区相对较小:相对于 Django 和 Flask 等其他 Python Web 框架,Sanic 的生态圈和社区还比较小,有时可能需要自己解决一些问题。
aiohttp
aiohttp 是一个基于 Python 3.5+ 的 HTTP 客户端/服务器框架,支持 WebSocket、HTTP/2 和 SSL/TLS 等协议。aiohttp 使用 asyncio 库来实现异步 I/O 操作,可以处理大量的并发请求。
特性:
- 高性能:aiohttp 使用 asyncio 库实现非阻塞式 I/O 操作和事件驱动,因此可以轻松地处理大量的并发请求。
- 支持异步 I/O:aiohttp 支持异步 I/O 操作,可以利用 Python 3.5+ 中引入的 async/await 关键字来提高服务器的性能和扩展性。
- WebSocket 支持:aiohttp 内置了对 WebSocket 的支持,使得构建实时应用程序更加容易和高效。
- 大文件上传和下载:aiohttp 可以轻松地处理大文件上传和下载,从而提高用户体验和响应速度。
- Gunicorn/Werkzeug 兼容:aiohttp 支持 Gunicorn 和 Werkzeug,可以使用它们来管理多个 worker 进程。
缺点:
- 学习曲线较陡峭:相对于 Flask 等其他 Python Web 框架,aiohttp 的学习曲线可能会更陡峭一些,需要投入更多的时间和精力进行学习和理解。
- 功能略显繁琐:aiohttp 提供了丰富的功能,但有时也可能造成一些不必要的繁琐。
Falcon
Falcon 是一个 Python Web 框架,专注于构建高性能 API。它由 Kurt Griffiths 创建,并于 2014 年开源。Falcon 的目标是提供一个轻量级、高效、可扩展的 Web 框架。
Falcon 具有以下优点:
- Falcon 非常快速,可以处理大量的并发请求。
- Falcon 非常易学易用,使用简单的装饰器语法定义路由和中间件。
- Falcon 支持多种 HTTP 服务器,包括内置的 WSGI 服务器、标准库中的 Wsgiref 服务器以及第三方的 Gunicorn 和 uWSGI 等。
- Falcon 支持多种数据序列化格式,包括 JSON、msgpack、Protobuf 等。
Falcon 非常轻巧,整个框架只有几千行代码,并且不需要任何外部依赖。
Falcon 框架的基本特性
- Falcon 框架非常小巧,所有核心功能都在一个单一的 .py 文件中。
- Falcon 使用装饰器来定义路由和请求方法,例如 @app.route(‘/’) 和 @app.get(‘/’)。
- Falcon 使用上下文对象来存储和传递数据,例如 request 和 response。
- Falcon 支持自定义中间件,可以实现各种复杂的功能,例如身份验证、授权、缓存等。
- Falcon 支持异步编程模式,并且与 Asyncio 兼容,允许开发人员创建高性能的 Web 应用程序。
缺点:
- 学习曲线较陡峭:尽管 Falcon 框架的文档非常详细,但对于没有 RESTful API 开发经验的人来说,学习曲线可能比较陡峭。此外,Falcon 框架的装饰器语法可能看起来比较奇怪,需要适应一段时间。
- 可扩展性有限:虽然 Falcon 框架支持自定义中间件,并且与 Asyncio 兼容,但在扩展上仍然存在一些限制。如果需要实现非常复杂的功能,可能需要考虑使用其他框架或自己编写代码。
- 缺少标准化:与其他 Web 框架相比,Falcon 的市场份额相对较小。因此,缺乏统一的标准和最佳实践,这可能会导致项目结构和代码规范的不统一性。
- 依赖性较少:虽然 Falcon 没有依赖于其他外部库,但这也意味着它缺乏许多优秀的第三方扩展库,例如 ORM、表单验证等等。
- 框架生命周期短暂:Falcon 框架的开发历史相对较短,并且社区规模相对较小。因此,它可能不能保证长期的更新和支持。
bottle
Bottle 是一个 Python Web 框架,它非常轻巧、易学易用,且不需要任何外部依赖。Bottle 由 Marcel Hellkamp 创建,并于 2009 年开源。Bottle 是一个非常轻量级的 Python Web 框架,非常易学易用,同时也提供了许多高级功能,如模板引擎、数据库集成等。虽然它不如其他流行的 Web 框架如 Flask 和 Django 那么强大,但对于小型项目或快速原型开发来说,它是一个非常不错的选择。
Bottle 具有以下优点:
- Bottle 非常小巧,整个框架只有几百行代码,可以很容易地嵌入到其他应用程序中。
- Bottle 非常易学易用,无需复杂的配置和安装过程,可以立即开始编写 Web 应用程序。
- Bottle 支持多种 HTTP 服务器,包括内置的 Werkzeug 服务器、标准库中的 Wsgiref 服务器以及第三方的 Gunicorn 和 uWSGI 等。
- Bottle 支持模板引擎,包括基于字符串的模板和文件系统的模板,并支持多种模板语言,如 Mako、Jinja2 和 Cheetah 等。
Bottle 框架的基本特性
- Bottle 框架非常小巧,所有核心功能都在一个单一的 .py 文件中。
- Bottle 使用装饰器来定义路由和请求方法,例如 @route(‘/’) 和 @get(‘/’)。
- Bottle 使用上下文对象来存储和传递数据,例如 request 和 response。
- Bottle 支持静态文件服务和文件上传。
- Bottle 可以与许多数据库进行集成,包括 SQLite、MySQL、PostgreSQL 和 MongoDB 等。
缺点:
- 缺乏标准化:与其他 Web 框架相比,Bottle 的市场份额相对较小。因此,缺乏统一的标准和最佳实践,这可能会导致项目结构和代码规范的不统一性。
- 功能相对较少:Bottle 相对于其他流行的 Web 框架如 Flask 和 Django 来说,功能相对较少。如果需要实现复杂的 Web 应用程序,可能需要使用其他框架或自己编写代码。
- 依赖性较少:虽然 Bottle 没有依赖于其他外部库,但这也意味着它缺乏许多优秀的第三方扩展库,例如 ORM、表单验证等等。
- 可扩展性有限:虽然 Bottle 框架支持万能的 WSGI 接口,可以适配许多 HTTP 服务器,但在扩展上仍然存在一些限制。如果需要实现非常复杂的功能,可能需要考虑使用其他框架或自己编写代码。
hug
Hug 是一个 Python 框架,用于快速构建 RESTful API。它最初由 Timothy Crosley 创建,并于 2016 年开源。它提供了许多强大的功能,包括路由、请求参数处理、数据序列化等。
为什么要使用 Hug?
- Hug 是一款非常易于使用的 Python 框架,它具有以下优点:
- Hug 框架的代码很简洁,可以在几分钟内创建出完整的 API 端点
- Hug 的性能非常高,可以处理大量的并发请求
- Hug 支持多种数据类型和序列化方法,包括 JSON, msgpack, BSON 等
- Hug 有详细的文档和示例,易于学习和使用
Hug 框架的基本特性
- Hug 框架通过装饰器来定义 API 路由
- Hug 自动将 URL 参数转换为 Python 函数参数
- Hug 使得 API 函数的返回值可以直接转换为 JSON 格式或其他格式
- Hug 支持中间件,可以实现各种复杂的功能,例如身份验证、授权、缓存等
Hug 是一款优秀的 Python 框架,但它也有一些缺点:
- 依赖性较多:Hug 框架本身虽然很小巧,但在使用时需要注意安装的依赖项。如果项目中大量使用了第三方库,这可能会导致依赖关系变得复杂。
- 学习曲线较陡峭:尽管 Hug 框架的文档非常详细,但对于没有 RESTful API 开发经验的人来说,学习曲线可能比较陡峭。此外,Hug 框架的装饰器语法可能看起来比较奇怪,需要适应一段时间。
- 缺少标准化:与其他 Web 框架相比,Hug 的市场份额相对较小。因此,缺乏统一的标准和最佳实践,这可能会导致项目结构和代码规范的不统一性。
- 可扩展性有限:尽管 Hug 框架提供了中间件功能,但在扩展上仍然存在一些限制。如果需要实现非常复杂的功能,可能需要考虑使用其他框架或自己编写代码。
参考链接:
Dash其实挺好用的,功能很强大