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更新---------------------------------------- ...
随机推荐
- Must use destructuring props assignmenteslint
eslint 检测提示Must use destructuring props assignmenteslint 使用对象结构就可以解决了
- HashMap 底层是如何实现的?
HashMap 在不同的 JDK 版本下的实现是不同的,在 JDK 1.7 时,HashMap 底层是通过数组 + 链表实现的:而在 JDK 1.8 时,HashMap 底层是通过数组 + 链表或红黑 ...
- 2023安洵杯web两道WP
Web CarelessPy 在首页提示存在eval和login的路由,在download存在任意文件下载 访问eval可以读取目录下的文件,知道/app/pycache/part.cpython-3 ...
- 搭建私人GPT及域名配置
前几天在掘金看到一个搭建私人ChatGPT的教程,看起来并不难. 我也有OpenAI的API Key,然后前阵子我看到我的账号余额还有很多,我的api key其实就一个机器人在用,没用多少. 还有,就 ...
- 「Python实用秘技14」快速优化Python导包顺序
本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第14 ...
- ClickHouse技术研究及语法简介
本文对Clickhouse架构原理.语法.性能特点做一定研究,同时将其与mysql.elasticsearch.tidb做横向对比,并重点分析与mysql的语法差异,为有mysql迁移clickhou ...
- 02-面试必会-SSM框架篇
01-什么是 Spring IOC 和 DI ? IOC : 控制翻转 , 它把传统上由程序代码直接操控的对象的调用权交给容 器,通过容器来实现对象组件的装配和管理.所谓的"控制反转&quo ...
- React框架学习基础篇-HelloReact-01
一直想掌握一门前端技术,于是想跟着张天宇老师学习,便开始学习React,以此来记录一下我的学习之旅. 学习一门新的技术首先是去官网看看,React官网链接是[https://zh-hans.react ...
- 自然语言处理 Paddle NLP - 文本翻译技术及应用-理论
什么是机器翻译 机器翻译质量的自动评价 从统计机器翻译到神经网络机器翻译 多语言/多领域/多模态的翻译应用 神经网络机器翻译面临的挑战 视频:https://aistudio.baidu.com/ai ...
- 数据挖掘18大算法实现以及其他相关经典DM算法:决策分类,聚类,链接挖掘,关联挖掘,模式挖掘。图算法,搜索算法等
数据挖掘18大算法实现以及其他相关经典DM算法:决策分类,聚类,链接挖掘,关联挖掘,模式挖掘.图算法,搜索算法等 算法码源见文末 1.算法目录 18大DM算法 包名 目录名 算法名 Associati ...