Python Web:Django、Flask和FastAPI框架对比
Django、Flask和FastAPI是Python Web框架中的三个主要代表。这些框架都有着各自的优点和缺点,适合不同类型和规模的应用程序。
Django:
Django是一个全功能的Web框架,它提供了很多内置的应用程序和工具,使得开发Web应用程序更加容易。Django采用了MTV(模型-模板-视图)设计模式,提供ORM等强大的功能,因此适合构建大型、复杂的Web应用程序,如社交网络或电子商务网站。Django的主要优点在于快速开发、自带管理后台、丰富的文档以及广泛的社区支持。但是,Django也很庞大,可能导致性能较低,并且学习曲线较陡峭。Flask:
Flask是一个轻量级的Web框架,它没有像Django那样的内置应用程序和工具,因此适合用于小型Web应用程序和原型的快速开发。Flask框架非常灵活,易于扩展,而且学习曲线相对Django来说更加平滑。由于其轻量级特性,Flask可以很好地与其他Python库集成,如SQLAlchemy等。但是,相对于Django,Flask缺少某些功能,如ORM等。FastAPI:https://fastapi.tiangolo.com/zh
FastAPI是一个较新的Web框架,它采用了异步编程模型和类型提示,性能非常出色。FastAPI支持OpenAPI(以前称为Swagger)规范,并提供自动生成API文档的功能。FastAPI易于使用、快速开发、高性能的特性使其成为开发高吞吐量API的首选框架。但是,由于其年轻的生态系统,FastAPI缺少一些Django和Flask所拥有的库和工具。
在使用场景方面,Django适用于需要处理大量数据或实现复杂业务逻辑的应用程序,而Flask适用于小型应用程序或快速原型开发。FastAPI则适用于开发高吞吐量API和微服务。
市场份额方面,据调查显示,2021年Django在全球Python Web框架中市场占有率最高,其次是Flask。FastAPI作为新兴框架,市场占有率尚不明确。
未来趋势方面,三者都有其优点和优秀的社区支持,在不同领域的应用中仍然有着广泛的前景。但是,随着Python生态系统的不断壮大,可能会涌现更多的Web框架,这将影响三者的市场份额。
以下是使用Django、Flask和FastAPI实现Hello World的代码:
安装依赖
requirements.txt
# async web framework
uvicorn==0.23.2
fastapi==0.101.1
# sync web framework
Flask==2.3.2
pip install -r requirements-sync.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
创建一个HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Hello VipSoft
</body>
</html>
Flask Demo
flask_demo.py
#!/usr/bin/env python
import logging
import os
from flask import Flask
# 指定静态页面的地址
app = Flask(__name__, static_url_path="/static/")
port = int(os.getenv("PORT", 8080))
# 启动后的首页,
@app.route("/")
def get_index():
return app.send_static_file("index.html")
# 使用@app.route装饰器定义了一个路由。在这个路由中,当浏览器请求/hello路径时,会执行名称为hello的函数并
@app.route('/hello')
def hello():
return 'Hello, Flask!'
# 启用时,指定端口 8080,其它默认
if __name__ == "__main__":
logging.root.setLevel(logging.INFO)
logging.info("Starting on port %d ", port)
app.run(port=port)
查看效果

FastAPI Demo
fastapi_demo.py
#!/usr/bin/env python
import logging
import os
from fastapi import FastAPI
from fastapi.responses import FileResponse
# 指定静态页面的地址
app = FastAPI()
port = int(os.getenv("PORT", 8080))
PATH = os.path.dirname(os.path.abspath(__file__))
@app.get("/")
async def get_index():
return FileResponse(os.path.join(PATH, "static", "index.html"))
@app.get("/hello")
async def hello():
return {"message": "Hello, FastAPI!"}
if __name__ == "__main__":
import uvicorn
logging.root.setLevel(logging.INFO)
logging.info("Starting on port %d ", port)
uvicorn.run(app, port=port)
查看效果

Python Web:Django、Flask和FastAPI框架对比的更多相关文章
- Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...
- python web django base skill
web框架本质 socket + 业务逻辑 框架实现socket tonado node.js 使用WSGI实现socket django flask 自己实现框架思路 wsgiref socket ...
- 说什么也要脱单——Python WEB开发:用Tornado框架制作简易【表白墙】网站
先来哔哔两句:(https://jq.qq.com/?_wv=1027&k=QgGWqAVF) 今天我们要用Python做Web开发,做一个简单的[表白墙]网站.众所周知表白墙的功能普遍更多的 ...
- 【简说Python WEB】Flask应用的文件结构
目录 [简说Python WEB]Flask应用的文件结构 1.文件结构的目录 2.配置程序--config.py 3.app应用包 4.剥离出来的email.py 5.蓝本(BLueprint)的应 ...
- 在学习python的Django\Flask\Tornado前你需要知道的,what is web?
我们都在讲web开发web开发,那到底什么是web呢? 如果你正在学习python三大主流web框架,那这些你必须要知道了 软件开发架构: C/S架构:Client/Server 客户端与服务端 ...
- python web -- django
一. 安装 django $ pip install django (env)$ python >> import django >> django.VERSION >& ...
- python web——Django架构
环境:windows/linux/OS 需要的软件:Firefox 浏览器(别的也可以 不过firfox和python的webdriver兼容性好) git版本控制系统(使用前要配置 用户 编辑器可以 ...
- python web开发flask框架 安装与环境
# encoding:utf-8 # 从flask这个框架中导入Flask这个类 from flask import Flask # 初始化一个Flask对象 # Flasks() # 需要传递一个参 ...
- Python Web 之 Flask
FLASK 一.概述 flask是一个基于python并依赖于Jinja2模板引擎和WerkZeug WSGI(Web Server Gatewey InterFace.web)服务的框架 WSGI: ...
- [flask/python/web] 解析flask web开发(Miguel著)一书第11章主页不显示博文表单的问题
---------------------------------------------以下内容2017.7.14更新---------------------------------------- ...
随机推荐
- Cannot apply DjangoModelPermissionsOrAnonReadOnly on a view that does not set `.queryset` or have a `.get_queryset()` method.
这个问题是在使用 django REST 做自定义认证的时候出现的 解决方法是 在settings.py 中注释掉这个 REST_FRAMEWORK={ 'DEFAULT_PERMISSION_CLA ...
- ET介绍—— 一切皆实体的设计
一切皆实体 目前十分流行ECS设计,主要是守望先锋的成功,引爆了这种技术.守望先锋采用了状态帧这种网络技术,客户端会进行预测,预测不准需要进行回滚,由于组件式的设计,回滚可以只回滚某些组件即可.ECS ...
- vue3+vite2+element-plus+ts搭建一个项目
花了几天用 vue3+ vite2+ element-plus+ ts 搭了个 极简版骨架型数据管理系统,使用静态数据模拟动态路由,路由拦截,登录页面鉴权等,使用了iconify字体图标,整合了ces ...
- 百度云原生数据库GaiaDB的HTAP与多地多活技术实践
摘要:云原生数据库在使用存算分离技术后,可以在完全兼容MYSQL协议和语法的情况下,极大提升单实例所能承载的数据规模与吞吐能力上限.但除了对客户端兼容外,对整个数据生态(地域容灾,数据分析,备份恢复) ...
- awk 内置变量与自定义变量
点击上方" 生信科技爱好者 ",马上关注 真爱,请置顶或星标 作者:ghostwu 原文:https://www.cnblogs.com/ghostwu/p/9085653.htm ...
- 三分钟免费将 Claude API 接入个人服务
首先我们介绍一下今天的主角 Claude Claude 是最近新开放的一款 AI 聊天机器人,是世界上最大的语言模型之一,比之前的一些模型如 GPT-3 要强大得多,因此 Claude 被认为是 Ch ...
- 用 Python + turtle 模块绘制五星红旗
用 Python 绘制五星红旗 在这个代码示例中,我将介绍如何使用 Python 的 turtle 模块绘制五星红旗.turtle 模块是一个图形库,可以轻松地在 Python 中实现简单的绘图功能. ...
- Kubernetes应用编排与管理 —— Deployment升级策略
1.Deployment概述 Deployment 是 Kubernetes 控制器的一种高级别实现,它构建于 ReplicaSet 控制器之上,它可用于为 Pod 和 ReplicaSet 资源提供 ...
- WakaTime Readme Stats-开源项目翻译
寻找不同语言和地区的翻译 #23 Readme中添加了功能标志的开发指标 眼前一亮的Readme统计数据 你是早起的还是夜间的? 你一天中什么时候工作效率最高? 你用什么语言编写代码? 让我们在你的个 ...
- Python 爬虫实战:驾驭数据洪流,揭秘网页深处
爬虫,这个经常被人提到的词,是对数据收集过程的一种形象化描述.特别是在Python语言中,由于其丰富的库资源和良好的易用性,使得其成为编写爬虫的绝佳选择.本文将从基础知识开始,深入浅出地讲解Pytho ...