【20.5 python中的FastAPI】
python中的FastAPI
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,基于 Python 3.6+ 的类型提示。它利用了 Python 3.7+ 的新特性,如类型提示(Type Hints),来自动生成 API 文档(基于 OpenAPI 和 Swagger UI),以及进行参数校验和序列化/反序列化。FastAPI 旨在简化 API 开发,同时保持高性能。
FastAPI 的特点
- 快速:极高的性能,可与 Node.js 和 Go 媲美。
- 智能:基于 Python 类型提示自动完成许多工作,如数据验证、文档生成等。
- 简单:设计简洁,易于学习和使用。
- 标准:基于 OpenAPI(之前称为 Swagger)和 JSON Schema 的标准。
- 基于 Pydantic:数据声明使用 Pydantic,提供数据验证和设置管理。
- 依赖注入:强大的依赖注入系统。
- 可测试:直接测试你的 API 函数,就像测试普通 Python 函数一样。
- 可扩展:可以轻松扩展以支持多种数据库和其他后端服务。
示例代码
下面是一个简单的 FastAPI 示例,该示例创建了一个 API,用于获取和添加项目的列表。
首先,你需要安装 FastAPI 和 Uvicorn(一个轻量级的 ASGI 服务器,用于运行 FastAPI 应用程序):
pip install fastapi uvicorn
然后,你可以创建一个 Python 文件(例如 main.py),并编写以下代码:
from fastapi import FastAPI
from pydantic import BaseModelapp = FastAPI()# 定义项目的 Pydantic 模型
class Item(BaseModel):name: strdescription: str = Noneprice: floattax: float = None# 获取项目列表的路由
@app.get("/items/")
async def read_items():return [{"name": "Foo", "price": 35.4}, {"name": "Bar", "price": 42.2}]# 创建一个新项目的路由
@app.post("/items/")
async def create_item(item: Item):return item
最后,你可以使用 Uvicorn 运行你的 FastAPI 应用程序:
uvicorn main:app --reload
这条命令会启动你的应用程序,并监听在 http://127.0.0.1:8000。--reload 参数意味着当代码更改时,服务器会自动重新加载。
现在,你可以使用浏览器或 Postman 等工具来测试你的 API。例如,访问 http://127.0.0.1:8000/items/ 会显示一个项目列表。你也可以通过 POST 请求到 http://127.0.0.1:8000/items/ 并附带 JSON 数据来创建一个新项目。
以上就是一个简单的 FastAPI 示例,展示了如何定义模型、路由和响应。
相关文章:
【20.5 python中的FastAPI】
python中的FastAPI FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,基于 Python 3.6 的类型提示。它利用了 Python 3.7 的新特性,如类型提示(Type Hints),来自动生成 A…...
研1日记13
正态分布: toTenor:转数字变为0-1 加载模型: model youmodel() model.load("路径") 测试单个样本:...
Go语言错误处理详解
Go语言以其简洁、高效和并发能力著称。在实际开发中,错误处理是一个不可避免且至关重要的部分。本文将深入探讨Go语言中的错误处理机制,涵盖其原理、使用方法、最佳实践,并提供丰富的代码示例和中文注释。 一、错误处理的基本概念 在Go语言…...
C++基础知识7 list
list 1. list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.2.5 list modifiers1.2.6 list的迭代器失效 2.1 模拟实现list 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 l…...
Android 车联网——汽车模块介绍(附1)
汽车模块指的是车辆中独立的电子控制单元(ECUs),如发动机控制单元(ECU)、车身控制模块(BCM)等,它们负责特定的功能或系统。 一、控制类模块 这些模块主要用于控制车辆的不同系统,确保车辆各部分的正常运行。 1、ECM ECM(Electronic Control Module,电子控制模块)…...
Windows下SDL2创建最简单的一个窗口
先看运行效果 再上代码: #include <stdio.h> #include "SDL.h"int main(int argc, char* argv[]) {// 初始化SDL视频子系统if (SDL_Init(SDL_INIT_VIDEO) -1){printf("Error: %s\n", SDL_GetError());return -1;} // 创建一个窗口SDL_…...
C++ | Leetcode C++题解之第406题根据身高重建队列
题目: 题解: class Solution { public:vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort(people.begin(), people.end(), [](const vector<int>& u, const vector<int>& v) …...
【网络安全】-ssrf服务器请求伪造攻击-burp
SSRF攻击服务器请求伪造攻击 CSRF攻击跨站请求伪造攻击也称客户端请求伪造攻击 两种攻击最主要的区别是一个在服务器,一个在客户端。 文章目录 前言 什么是SSRF攻击? 1.分类: 针对服务器的 SSRF 攻击: 针对后端系统的SSRF攻击: …...
C语言 | Leetcode C语言题解之第405题数字转换为十六进制数
题目: 题解: char * toHex(int num){int i0;char *nums(char*)malloc(sizeof(char)*32);unsigned int newnum(unsigned int)num;if(num0){nums[0]0;nums[1]\0;return nums;}while(newnum>1){int flagnewnum%16;newnum/16;if(flag<9){nums[i]flag0…...
Python快速入门 —— 第一节:基础类型
Python 快速教程说明 适用人群 有其他语言编程基础,或了解过python的群体,至少需要知道变量、对象、函数等基本概念想快速通过python实现一些功能,却不想了解python的底层实现的人群想快速了解python语言框架的人群有兴趣了解python的任何人…...
评价类——熵权法(Entropy Weight Method, EWM),完全客观评价
目录 一、 熵权法赋权代码说明1.1 介绍 二、 手把手教你运行代码2.1 数据示例2.2 可直接运行代码2.3 shangquanfa_eg_Sheet1.csv数据可视化2.4 代码运行过程截屏2.5 代码运行结果截屏2.6 对熵权法的结果分析 三、 提供的代码如何修改?四、 为什么确定极小化指标&…...
Redis——通用命令
目录 Redis通用命令Redis中最核心的两个命令getset Redis全局命令keys语法注意事项 existsdel(delete)expirettlredis的key的过期策略是怎么实现的?了解拓展 type总结 Redis通用命令 Redis的命令非常非常多,所以 1. 掌握常用命令(多操作练习…...
(k8s)kubernetes 挂载 minio csi 的方式(pod挂载pvc存在csi驱动问题,挂载不上)
一、安装Minio(Minio分布式集群搭建部署_minio集群最少几台-CSDN博客) 生成accessKeyID和secretAccessKey: 二、安装csi-s3插件(在k8s集群上) 首先我们把插件的yaml文件都下载下来,为了保证版本测试的一致性,我们下载…...
python tkinter
基本使用 基于tkinter创建 GUI基本四步:窗口->组件->布局->事件 1.创建窗口对象 from tkinter import *root Tk() # 创建窗口root.mainloop() # 进入事件循环 2.创建组件 按钮文本等组件 btn Button(root) # 创建Button组件,使组件在…...
Flink CEP(复杂事件处理)高级进阶
Flink CEP(Complex Event Processing,复杂事件处理)是 Apache Flink 中用于复杂事件模式检测的库。它允许用户定义复杂的事件模式,从流数据中检测出符合模式的事件序列。这在实时监控、欺诈检测、用户行为分析等场景中非常有用。 Flink CEP 高级进阶 为了深入理解和使用 …...
libmodbus:写一个modbusTCP服务
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
函数模板(初阶)
Hello,大家好,我们大家都知道,C这个编程语言是由C语言继承而来的,因为是继承,所以我们的C就要做出一些区分,要不然的话,就和C语言没有本质上的区别了,我们现在在社会中使用比较多的是…...
中间件之RocketMQ
RocketMQ是一个开源的分布式消息队列系统,起源于阿里巴巴集团内部。最初,RocketMQ(前身为Metaq)被设计为满足阿里巴巴集团内部大规模分布式系统下的高吞吐量、低延迟和高可靠性的消息传递需求。随着其在阿里巴巴内部的广泛应用和不…...
linux第二课(docker的安装使用)
目录 一.关于docker (1)背景引入 (2)docker介绍 (3)功能 (4)Docker架构 二.docker的安装及相关的命令 (1)docker的安装 (2)docker的配置 (3)docker镜像命令 (4)容器命令 三.docker安装myaql 编辑 四.数据卷挂载 1.数据卷挂载引入 2.数据卷挂载图解 3.数据卷的安装…...
Java数据存储结构——二叉查找树
文章目录 22.1.2二叉查找树22.1.2.1 概述22.1.2.1二叉查找树添加节点22.1.2.2二叉查找树查找节点22.1.2.3 二叉树遍历22.1.2.4 二叉查找树的弊端 22.1.2二叉查找树 22.1.2.1 概述 二叉查找树,又称二叉排序树或者二叉搜索树 二叉查找树的特点: 每一个节点上最多有…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
