当前位置: 首页 > news >正文

FastAPI 学习笔记

简介:

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 并基于标准的 Python 类型提示。

关键特性:

  • 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。

  • 高效编码:提高功能开发速度约 200% 至 300%。*

  • 更少 bug:减少约 40% 的人为(开发者)导致错误。*

  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。

  • 简单:设计的易于使用和学习,阅读文档的时间更短。

  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。

  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。

  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。

Starlette,Pydantic 与 FastAPI 的关系

Pydantic 是一个基于 Python 类型提示来定义数据验证,序列化和文档(使用 JSON 模式)库

Starlette 是一种轻量级的 ASGI 框架/工具包,是构建高性能 Asyncio 服务的理想选择,异步功能网关

pydantic库学习

pydantic中BaseModel类

数据导入类

校验失败处理

模型类的属性和方法

数据写入文件

递归/嵌套模型

from datetime import datetime

from pydantic import BaseModel

from typing import List, Optional

from pathlib import Path

class User(BaseModel):

    id: int  #无默认值所以是必填字段

    name: str = "Slaine Troyard"  #可选字段,有默认字符串

    signup_ts: Optional[datetime] #可选字段,默认为None

    friends: List[int] = []    #列表中元素为int类型或者可转换为int

external_data = {

    "id": "123",

    "singnup_ts": "2022-7-12 20:51",

    "friends": [1, 2, "3"]  #满足friends要求

}

print("-------------------------------")

#使用python解包方式 ** ,将external_data数据传到类模板中实例化

user = User(**external_data)

print(user.id, user.friends)  #打印出实例化对象指定属性

print(user.dict())   #以字典形式打印出对象内容(字符串3被自动转换为int)

###----校验失败处理

try:

    User(id=1, signup_ts=datetime.today(), friends=[1,2,"not number"])

except ValueError as e:

    print(e.json())  #将报错json格式化

print("----------------------------------")

###模型类的属性和方法

print(user.dict())

print(user.json())

print(user.copy())

print(User.parse_obj(obj=external_data))#解包的方法,解析字典数据

print(User.parse_raw('{"id": "123", "name": "Slaine Troyard", "signup_ts": "2022-7-12 20:51", "friends": [1, 2, 3]}')) #解析原生数据

#数据写入文件

path = Path('pydantic_writin.json')

path.write_text('{"id": "123", "name": "Slaine Troyard", "signup_ts": "2022-7-12 20:51", "friends": [1, 2, 3]}')

print(User.parse_file(path))

print("----------------------------------")

print(user.schema())

print(user.schema_json())#显示输出数据的格式和方案

print(user.construct()) #不检验数据直接创建模型类||与parse_obj相比它不作自动校验

print("----------")

print(User.__fields__.keys())

print("----------------------------------")

####递归/嵌套模型

class Sound(BaseModel):

    sound: str

class Dog(BaseModel):

    birthday: datetime

    weight: float = Optional[None]

    sound: List[Sound]

dogs = Dog(birthday=datetime.today(), weight=12.3, sound=[{"sound":"wang wang"}, {"sound": "ying ying"}])

print(dogs.dict())

fastApi 入门

简单的 Web 应用开发只需要4步即可完成。

  • 创建一个 APP 实例

  • 编写一个路径操作装饰器(如 @app.get("/"))

  • 编写一个路径操作函数

  • 运行开发服务器(如 uvicorn main:app--reload)

1.环境准备

     pip install fastapi == 版本号  

        

     pip install uvicorn  类似于tomcat 的作用   专为异步 Python Web 应用设计的服务器

2. 入门案例

from fastapi import FastAPI

# 创建一个APP实例

app = FastAPI()

 

# 添加路径操作装饰器和路径操作函数

@app.get("/")

async def demo():

    return {"Hello": "World"}

 

if __name__ == "__main__":

    import uvicorn

    # 启动服务,注意APP前面的文件名称

    uvicorn.run(app='helloWorld:app', host="127.0.0.1", port=8010, reload=True, debug=True)

   启动 项目中应用 直接在main 中 uvicorn.run其中包括了多个配置参数

相关文章:

FastAPI 学习笔记

简介: FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 并基于标准的 Python 类型提示。 关键特性: 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic&…...

Elasticsearch:过滤 HNSW 搜索,快速模式

作者:来自 Elastic Benjamin Trent 通过我们的 ACORN-1 算法实现,探索我们对 Apache Lucene 中的 HNSW 向量搜索所做的改进。 多年来,Apache Lucene 和 Elasticsearch 一直支持使用 kNN 查询的过滤搜索,允许用户检索符合指定元数据…...

华为hcia——Datacom实验指南——STP工作基本原理及STP/RSTP基本功能配置

什么时候需要用到STP 在二层交换网络中,为了避免环路产生。 什么是STP STP生成树协议,是用来在冗余链路上消除二层环路。在众多交换机中,需要设置出一个根桥,其余的交换机称为非根桥,根桥是整个交换网络的核心&…...

Vue核心知识:动态路由实现完整方案

在Vue中实现动态路由,并结合后端接口和数据库表设计,是一个复杂的项目,需要多个技术栈和步骤的配合。以下将详细描述整个实现过程,包括数据库设计、后端接口设计、前端路由配置以及如何实现动态路由的功能。 目录 一、需求分析二…...

【Maui】系统找不到指定的文件Xamarin.Android.Aapt2.targets

文章目录 前言一、问题描述二、解决方案三、软件开发(源码)四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用。 使用 .NET MAUI,可从单个共享代码库开发可在 And…...

通过返回的key值匹配字典中的value值

需求 页面中上面搜索项有获取字典枚举接口,table表格中也有根据key匹配字典中的value 方案一 需要做到的要求 这里上面下拉列表是一个组件获取的字典,下面也是通过字典匹配,所以尽量统一封装一个函数,每个组件保证最少变动tabl…...

【Linux第一弹】Linux基础指令(上)

目录 1.ls指令 1.1 ls使用实例 2.pwd指令 3.cd指令 3.1 cd使用实例 4.touch指令 4.1touch使用实例 5.mkdir指令 5.1mkdir使用实例 6.rmdir指令和rm指令 6.1 rmdir指令使用实例->: 6.2 rm指令使用实例 7.man指令 8.cp指令 8.1 cp 使用实例 9.mv指令 9.1mv使用…...

GitCode 助力 JeeSite:开启企业级快速开发新篇章

项目仓库(点击阅读原文链接可直达前端仓库) https://gitcode.com/thinkgem/jeesite 企业级快速开发的得力助手:JeeSite 快速开发平台 JeeSite 不仅仅是一个普通的后台开发框架,而是一套全面的企业级快速开发解决方案。后端基于 …...

OpenCV计算摄影学(3)CUDA 图像去噪函数fastNlMeansDenoising()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 使用非局部均值去噪算法(Non-local Means Denoising algorithm)执行图像去噪,该算法来源于 http://www.ipol.…...

【react】快速上手基础教程

目录 一、React 简介 1.什么是 React 2.React 核心特性 二、环境搭建 1. 创建 React 项目 2.关键配置 三、核心概念 1. JSX 语法 表达式嵌入 样式处理 2. 组件 (Component) 3. 状态 (State) 与属性 (Props) 4. 事件处理 合成事件(SyntheticEvent) 5. …...

leaflet扩展插件esri-leaflet.js

esri-leaflet.js是一个开源的JavaScript库,它允许开发者在Leaflet地图上轻松地使用Esri的服务,如ArcGIS Online和ArcGIS Server的图层。以下是对esri-leaflet.js插件的详细介绍: 一、主要功能 esri-leaflet.js的主要功能是将Esri的地图服务…...

electron-builder打包时github包下载失败【解决办法】

各位朋友们,在使用electron开发时,选择了electron-builder作为编译打包工具时,是否经常遇到无法从github上下载依赖包问题,如下报错: Get "https://github.com/electron/electron/releases/download/v6.1.12/ele…...

分片加载网络图片

用户提到他们有一个很大的图片需要优化加载速度。用户尝试了把图片分成多份,每份高度100或者自定义,加载时有动画效果,但感觉还是有点慢。个人还是建议图片压缩或者使用CDN加速。 首先,我需要理解用户的问题。他们可能是在一个网…...

考研复试问题总结-数据结构(1)

1. 说一下你对数据结构的理解 我觉得数据结构不仅仅是存数据的“容器”,更是一种思维方式。其实,在我们写程序时,经常会遇到各种各样的数据操作需求,而不同的数据结构能解决问题的效率和方式都不一样,所以选择合适的数…...

DeepSeek 助力 Vue3 开发:打造丝滑的网格布局(Grid Layout)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...

架构案例:从初创互联网公司到分布式存储与反应式编程框架的架构设计

文章目录 引言一、初创互联网公司架构演化案例1. 万级日订单级别架构2. 十万级日订单级别架构3. 百万级日订单级别架构 二、分布式存储系统 Doris 架构案例三、反应式编程框架架构案例总结 引言 分布式架构 今天我们将探讨三种不同类型的架构案例,分别探讨 一个初…...

51页精品PPT | 农产品区块链溯源信息化平台整体解决方案

PPT展示了一个基于区块链技术的农产品溯源信息化平台的整体解决方案。它从建设背景和需求分析出发,强调了农产品质量安全溯源的重要性以及国际国内的相关政策要求,指出了食品安全问题在流通环节中的根源。方案提出了全面感知、责任到人、定期考核和追溯反…...

【Pytest】setup和teardown的四个级别

文章目录 1.setup和teardown简介2.模块级别的 setup 和 teardown3.函数级别的 setup 和 teardown4.方法级别的 setup 和 teardown5.类级别的 setup 和 teardown 1.setup和teardown简介 在 pytest 中,setup 和 teardown 用于在测试用例执行前后执行一些准备和清理操…...

JavaScript系列03-异步编程全解析

本文介绍了异步相关的内容,包括: 回调函数与回调地狱Promise详解async/await语法Generator函数事件循环机制异步编程最佳实践 1、回调函数与回调地狱 JavaScript最初是为处理网页交互而设计的语言,异步编程是其核心特性之一。最早的异步编…...

Linux学习——退出vi编辑模式

初学Linux的时候,在使用vi 操作时候,有时候可能进入的是一个文件夹,这样子在退出的时候很不好操作! 下面总结一些vi 退出命令,学习! 进入编辑模式,按 o 进行编辑 编辑结束,按ESC 键 跳到命令…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

golang循环变量捕获问题​​

在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下: 问题背景 看这个代码片段: fo…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...