python中Web API 框架
Python 中有几个非常流行的 Web API 框架,它们让你可以轻松地构建和部署高效的 Web API。下面我将为你介绍几个最受欢迎的 Python Web API 框架,及其使用方法和特点。
1. FastAPI
FastAPI 是一个现代、快速(非常高性能)的 Web 框架,用于构建 APIs,基于标准 Python 类型提示。它以性能、开发效率和自动生成文档的特性深受开发者喜爱。
-
特点:
- 基于 ASGI,支持异步编程,性能非常高,几乎媲美 Node.js 和 Go。
- 使用 Python 的类型注解,自动生成 OpenAPI 规范(Swagger UI 文档)。
- 内置数据验证和序列化功能,使用 Pydantic 进行数据模型管理。
-
安装 FastAPI 和 Uvicorn(ASGI 服务器):
pip install fastapi uvicorn -
示例代码:
from fastapi import FastAPIapp = FastAPI()@app.get("/") async def read_root():return {"message": "Hello, FastAPI!"}@app.get("/items/{item_id}") async def read_item(item_id: int, q: str = None):return {"item_id": item_id, "query": q} -
运行应用:
使用uvicorn运行应用。uvicorn app:app --reload--reload参数会在文件修改时自动重启服务器。 -
优点:
- 高性能,适合需要高吞吐量的场景。
- 自动生成 API 文档,开发体验非常好。
- 完全异步,支持大规模并发请求。
2. Flask
Flask 是一个非常轻量级的 Web 框架,虽然它不是专门为 Web API 设计的,但它的灵活性使其成为构建 API 服务的流行选择之一。通过与 Flask 扩展(如 Flask-RESTful)结合,开发 API 变得更加简单。
-
特点:
- 微框架,轻量且灵活,可以根据需求扩展。
- 丰富的插件和扩展生态系统。
-
安装 Flask:
pip install Flask -
Flask 简单 API 示例:
from flask import Flask, jsonify, requestapp = Flask(__name__)@app.route('/') def home():return jsonify({"message": "Hello, Flask!"})@app.route('/items/<int:item_id>', methods=['GET']) def get_item(item_id):return jsonify({"item_id": item_id})if __name__ == '__main__':app.run(debug=True) -
运行 Flask 应用:
python app.py -
优点:
- 简单、灵活,非常适合小型项目或原型开发。
- 丰富的插件支持,如 Flask-RESTful、Flask-SQLAlchemy 等。
3. Django Rest Framework (DRF)
Django Rest Framework (DRF) 是 Django 框架的一个强大扩展,专注于构建 Web APIs。它利用 Django 的 ORM 和认证系统来快速构建强大的、可扩展的 API。
-
特点:
- 强大的 ORM 支持,基于 Django 的认证和权限管理。
- 丰富的序列化工具,可以快速将复杂的数据结构转为 JSON。
- 内置分页、过滤、认证等常见 API 功能。
-
安装 DRF:
pip install djangorestframework -
DRF 示例:
创建一个 Django 项目并配置 DRF:django-admin startproject myproject cd myproject编辑
settings.py文件,添加'rest_framework'到INSTALLED_APPS。INSTALLED_APPS = [# ...'rest_framework', ]创建一个简单的 API 视图:
from rest_framework.views import APIView from rest_framework.response import Response from django.urls import pathclass HelloWorld(APIView):def get(self, request):return Response({"message": "Hello, Django Rest Framework!"})urlpatterns = [path('api/hello/', HelloWorld.as_view()), ] -
运行应用:
python manage.py runserver -
优点:
- 强大的功能,适合构建复杂、可扩展的 Web 应用和 API。
- 与 Django 完全集成,适合需要同时支持前后端的项目。
4. Tornado
Tornado 是一个非阻塞的 Web 服务器和 Web 框架,特别适合处理长连接(如 WebSockets),其异步特性使其成为构建高并发 API 服务的好选择。
-
特点:
- 高性能,专为异步和非阻塞 I/O 设计,适合大规模并发请求。
- 支持长连接和 WebSocket。
-
安装 Tornado:
pip install tornado -
Tornado 示例:
import tornado.ioloop import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self):self.write("Hello, Tornado!")def make_app():return tornado.web.Application([(r"/", MainHandler),])if __name__ == "__main__":app = make_app()app.listen(8888)tornado.ioloop.IOLoop.current().start() -
运行 Tornado 应用:
python app.py -
优点:
- 高性能,适合实时应用和长连接服务。
- 异步架构,适合构建大规模并发应用。
5. Falcon
Falcon 是一个轻量级、高性能的 Web 框架,专门为 API 服务设计,适合构建快速、低延迟的 API。它的设计理念是尽可能地减少不必要的开销。
-
特点:
- 轻量且高效,专为 API 服务设计,响应速度非常快。
- 易于与其他异步框架或库结合使用。
-
安装 Falcon:
pip install falcon -
Falcon 示例:
import falconclass HelloWorldResource:def on_get(self, req, resp):resp.media = {"message": "Hello, Falcon!"}app = falcon.App() app.add_route("/", HelloWorldResource())if __name__ == "__main__":from wsgiref import simple_serverhttpd = simple_server.make_server('127.0.0.1', 8000, app)httpd.serve_forever() -
运行 Falcon 应用:
python app.py -
优点:
- 高性能,低延迟,适合构建轻量 API。
- 代码非常简洁,API 设计清晰。
总结
- FastAPI:适合需要高性能和异步支持的 API 项目,自动生成文档让开发体验非常好。
- Flask:轻量灵活,非常适合小型 API 项目或快速原型开发。
- Django Rest Framework (DRF):适合基于 Django 的项目,特别是需要复杂认证和权限管理的大型 API 服务。
- Tornado:擅长处理长连接和高并发场景,非常适合实时应用和 WebSockets。
- Falcon:高性能且轻量,专为构建高效、低延迟的 API 服务设计。
每个框架都有其独特的优势,根据你的具体需求选择合适的框架,可以让开发过程更加高效和愉快。如果有其他问题或需要更详细的例子,随时告诉我! 😄
相关文章:
python中Web API 框架
Python 中有几个非常流行的 Web API 框架,它们让你可以轻松地构建和部署高效的 Web API。下面我将为你介绍几个最受欢迎的 Python Web API 框架,及其使用方法和特点。 1. FastAPI FastAPI 是一个现代、快速(非常高性能)的 Web 框…...
Linux(6)--CentOS目录
文章目录 1. 根目录2. cd目录切换命令3. CentOS目录介绍4. pwd命令介绍5. ls命令介绍5.1 ls5.2 ls -a5.3 ls -l 1. 根目录 Windows电脑的根目录是计算机(我的电脑),然后C盘、D盘。 Linux系统的根目录是/,我们可以使用cd /进入根目录,然后使…...
标准C++(二)
一、名字空间 什么是名字空间 在C语言中定义的全局变量、函数、结构、联合、枚举、枚举值、宏都在全局作用域下,所以当项目比较庞大时,非常容易造成命名冲突(以模块名作前缀、后缀),所以C中选择把全局作用域进行拆分…...
硬件工程师笔试面试——保险丝
目录 10、保险丝 10.1 基础 保险丝原理图 保险丝实物图 10.1.1 概念 10.1.2 保险丝的工作原理 10.1.3 保险丝的主要类型 10.1.4 保险丝的选择和使用注意事项 10.2 相关问题 10.2.1 保险丝的额定电流和额定电压是如何确定的? 10.2.2 保险丝的熔断速度对电路保护有何…...
本地安装Ollama+WebUI
本地安装OllamaWebUI B站教程地址:https://www.bilibili.com/video/BV1Kz421h7Jk/?spm_id_from333.337.search-card.all.click&vd_source42b07826977d09765ec11b9fa06715e5 一、下载Ollama https://ollama.com/download 支持mac、linux、windows 选择在ubu…...
请求响应-05.请求-日期参数JSON参数
一.日期参数 当浏览器发起的请求参数类型是日期参数时,我们通常使用LocalDateTime对象来接收,前面使用DateTimeFormat注解来完成日期的格式转换(日期时间格式有多种,需要哪种就设置为哪种:如yyyy-MM-dd HH:mm:ss&…...
CSS学习路线
CSS学习路线大全及面试常见题目可以归纳为以下几个部分: CSS学习路线大全 CSS基础 引入CSS的方式:外部样式表、内部样式表、内联样式。CSS选择器:包括ID选择器、类选择器、标签选择器、后代选择器、子选择器、相邻兄弟选择器、兄弟选择器、…...
Linux memcg lru lock提升锁性能
目录 内核关于per memcg lru lock的重要提交: 计算虚拟地址转换基本机制 问题背景 swap换入流程 时奎亮的per memcg lru lock分享视频 内核关于per memcg lru lock的重要提交: f9b1038ebccad354256cf84749cbc321b5347497 6168d0da2b479ce25a4647d…...
【spring】引入 Jackson 依赖 对java对象序列号和反序列化
Jackson Jackson 是一个非常流行的 Java 序列化/反序列化库,用于将 JSON 转换为 Java 对象,或者将 Java 对象转换为 JSON。要在你的 pom.xml 文件中引入 Jackson 依赖,你可以按照下面的步骤进行操作。引入 Jackson 依赖 通常,Jackson 核心库包含以下三个部分: jackson-dat…...
算法面经手撕系列(3)--手撕LayerNormlization
LayerNormlization 在许多的语言模型如Bert里,虽然都是说做的LayerNormlization,但计算均值和方差只会沿着channel维度做,并不是沿着seq_L和channel维度一起做,参考:BERT用的LayerNorm可能不是你认为的那个Layer Norm LayerNorm…...
出厂非澎湃OS手机解BL锁
脚本作者:酷安mlgmxyysd 脚本项目链接:https://github.com/MlgmXyysd/Xiaomi-HyperOS-BootLoader-Bypass/ 参考 B站作者:蓝空穹 https://www.bilibili.com/read/cv33210124/ 其他参考:云墨清风、水墨青竹、Magisk中文网 决定解BL…...
Go语言错误处理之道:优雅地应对程序中的问题
错误处理是任何编程语言中的关键部分,Go语言以其独特的错误处理机制而著称。对于初学者来说,理解Go语言中的错误处理对于编写健壮和可靠的程序至关重要。 为什么需要错误处理 在编程中,错误处理是必不可少的,因为程序可能会遇到…...
LIMS实验室管理系统的特点
LIMS实验室管理系统在实验室管理中发挥着不可或缺的作用。首要特点是其强大的自动化数据管理功能,该系统能够无缝集成实验室从样品接收到测试结果录入与存储的全过程,显著提升了数据的准确性和可靠性,减少了人为错误的可能性。 流程优化是LI…...
vue之 package.json和package-lock.json
一、package.json 定义了当前项目所需要引用的各个模块,可以手工修改配置,也可以删除后,使用npm init命令重新自动生成。 但是该文件只锁定大版本号,也就是版本号的第一位,所以你会发现两个文件中同一个包的版本号不一…...
android 老项目中用到的jar包不存在,通过离线的方法加载
1、之前的项目用的jar包,已经不在远程仓库中,只能手工去下载,并且安装。 // implementation com.github.nostra13:Android-Universal-Image-Loader // implementation com.github.lecho:hellocharts-android:v1.5.8 这…...
每天五分钟玩转深度学习框架PyTorch:梯度下降之学习率衰减
本文重点 我们前面学习了优化器optim,然后学习了为神经网络不同层设置不同的学习率,本节课程我们讲解学习率衰减的方法,也就是说如何在训练过程中动态的修改学习率,本文介绍两种方法。本文是学习第6步(优化器) 为什么要进行学习率衰减 对于一阶梯度进行优化的方法而言,…...
智能家居配上高颜值UI,瞬间感觉消费不起了呢
高颜值的UI设计可以给智能家居产品带来奢华和高端的感觉,为大家分享一波搞颜值界面。 高颜值的智能家居界面设计可以带来以下优势和好处: 用户体验提升: 高颜值的界面设计可以提升用户的视觉享受和满意度。精美的界面设计可以给用户带来愉…...
Winform登录实现及工具栏切换
1、登录实现 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace LoginApp {public par…...
Git bash使用
将本地文件推送到github上 先在所在文件夹进行初始化 git init绑定你的远程仓库 git remote add origin URL 随即 git add 指定文件 ——将工作区域中的文件添加到缓冲区 git commit -m【提交附带的信息】 git push origin master 推送到远程仓库 推送的时候可能会出现一些情…...
Java入门程序-HelloWorld
Java程序开发的三个步骤 1.编写代码得到 .java 源代码文件 2.使用javac编译得到 .class 字节码文件 3.使用java运行 注意事项 建议代码文件名全英文,首字母大写,满足驼峰命名法,源代码文件的后缀必须是.java 开发HelloWorld程序 &…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
