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程序 &…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...

iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...

Redis上篇--知识点总结
Redis上篇–解析 本文大部分知识整理自网上,在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库,Redis 的键值对中的 key 就是字符串对象,而 val…...
大模型真的像人一样“思考”和“理解”吗?
Yann LeCun 新研究的核心探讨:大语言模型(LLM)的“理解”和“思考”方式与人类认知的根本差异。 核心问题:大模型真的像人一样“思考”和“理解”吗? 人类的思考方式: 你的大脑是个超级整理师。面对海量信…...