尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Fastapi(1)
数据校验借助 Pydantic使用标准的 Python 类型来声明请求体。from fastapi import FastAPI from pydantic import BaseModel ​ app FastAPI() ​ ​ class Item(BaseModel): name: str price: float is_offer: bool | None None ​ ​ app.get(/) def read_root(): return {Hello: World} ​ ​ app.get(/items/{item_id}) def read_item(item_id: int, q: str | None None): return {item_id: item_id, q: q} ​ ​ app.put(/items/{item_id}) def update_item(item_id: int, item: Item): return {item_name: item.name, item_id: item_id}Python语法特性类型提示Python 支持可选的“类型提示”也叫“类型注解”。无类型注解def get_full_name(first_name, last_name): full_name first_name.title() last_name.title() return full_name ​ ​ print(get_full_name(john, doe))函数功能接收first_name和last_name。通过title()将每个参数的第一个字母转换为大写。用一个空格将它们拼接起来。引入类型注解如果需要调用“把首字母变大写的方法”。是upper是uppercasefirst_uppercase还是capitalizeIDE 完全没有提示因为IDE也不知道这个参数类型所以不知道能调用哪些方法。为了解决这个问题引入类型注解def get_full_name(first_name: str, last_name: str): full_name first_name.title() last_name.title() return full_name ​ ​ print(get_full_name(john, doe))因为编辑器知道变量的类型你不仅能得到补全还能获得错误检查比如传参的时候传入错误类型参数会触发检查简单类型注解def get_items(item_a: str, item_b: int, item_c: float, item_d: bool, item_e: bytes): return item_a, item_b, item_c, item_d, item_e注意Python3 ❌ 没有 long 类型Python3 的int就是任意精度的整数 可以直接接收数据库 BIGINT 类型数据typing模块在一些额外的用例中你可能需要从标准库的typing模块导入内容。比如当你想声明“任意类型”时可以使用typing中的Anyfrom typing import Any ​ ​ def some_function(data: Any): print(data)泛型类型有些类型可以在方括号中接收“类型参数”type parameters用于声明其内部值的类型。比如“字符串列表”可以写为list[str]。列表def process_items(items: list[str]): for item in items: print(item)元组集合def process_items(items_t: tuple[int, int, str], items_s: set[bytes]): return items_t, items_s字典def process_items(prices: dict[str, float]): for item_name, item_price in prices.items(): print(item_name) print(item_price)Union可以声明一个变量可以是若干种类型中的任意一种比如既可以是int** 也可以是str。定义时使用竖线|把两种类型分开。这称为“联合类型”union**因为变量可以是这两类类型集合的并集中的任意一个。def process_item(item: int | str): print(item)Nonedef say_hi(name: str | None None): if name is not None: print(fHey {name}!) else: print(Hello World)类型作为类型class Person: def __init__(self, name: str): self.name name ​ ​ def get_person_name(one_person: Person): return one_person.namePydantic 模型Pydantic 是一个用于执行数据校验的 Python 库。FastAPI完全建立在 Pydantic 之上。你将数据的“结构”声明为带有属性的类。每个属性都有一个类型。然后你用一些值创建这个类的实例它会校验这些值并在需要时把它们转换为合适的类型返回一个包含所有数据的对象。你还能对这个结果对象获得完整的编辑器支持。from datetime import datetime ​ from pydantic import BaseModel ​ ​ class User(BaseModel): id: int name: str John Doe signup_ts: datetime | None None friends: list[int] [] ​ ​ external_data { id: 123, signup_ts: 2017-06-01 12:22, friends: [1, 2, b3], } user User(**external_data) print(user) # User id123 nameJohn Doe signup_tsdatetime.datetime(2017, 6, 1, 12, 22) friends[1, 2, 3] print(user.id) # 123带元数据注解的类型提示Python 还提供了一个特性可以使用Annotated在这些类型提示中放入额外的元数据。你可以从typing导入Annotated。from typing import Annotated ​ ​ def say_hello(name: Annotated[str, this is just metadata]) - str: return fHello {name}Python 本身不会对这个Annotated做任何处理。对于编辑器和其他工具类型仍然是str。但你可以在Annotated中为FastAPI提供额外的元数据来描述你希望应用如何行为。重要的是要记住传给Annotated的第一个类型参数才是实际类型。其余的只是给其他工具用的元数据。现在你只需要知道Annotated** 的存在并且它是标准 Python。**async/await如果你正在使用第三方库它们会告诉你使用await关键字来调用它们就像这样# 阻塞等待这个函数操作完 异步函数必须等待执行完才能在下面拿到结果 results await some_library()然后通过async def声明你的路径操作函数app.get(/) async def read_results(): results await some_library() return results如果你正在使用一个第三方库和某些组件比如数据库、API、文件系统...进行通信第三方库又不支持使用await目前大多数数据库三方库都是这样这种情况你可以像平常那样使用def声明一个路径操作函数就像这样app.get(/) def results(): results some_library() return resultsPython 的现代版本支持通过一种叫协程——使用async和await语法的东西来写”异步代码“。Starlette 和FastAPI 是基于 AnyIO 实现的这使得它们可以兼容 Python 的标准库 asyncio 和 Trio。FastAPI 中推荐请求处理方法全部使用async def来声明
RELATED

相关推荐

W4A8 量化原理深度解析:Qwen3-1.7B-W4A8-V1 为什么选择 4bit 权重 8bit 激活(完整指南)

W4A8 量化原理深度解析:Qwen3-1.7B-W4A8-V1 为什么选择 4bit 权重 8bit 激活(完整指南)

【免费下载链接】Qwen3-1.7B-W4A8-V1 项目地址: https://ai.gitcode.com/hf_mirrors/vllm-ascend/Qwen3-1.7B-W4A8-V1 点击查看 免费下载 Qwen3-1.7B-W4A8-V1 是一个面向昇腾 NPU 的 W4A8 量化模型:它以 Qwen3-1.7B 为基础,将权重&#xff0…

📅 2026/10/22 12:26:06
UFM-Base 使用避坑指南:cc-by-nc-4.0 许可证解读、引用规范与商用限制必读清单

UFM-Base 使用避坑指南:cc-by-nc-4.0 许可证解读、引用规范与商用限制必读清单

【免费下载链接】UFM-Base 项目地址: https://ai.gitcode.com/hf_mirrors/infinity1096/UFM-Base 点击查看 免费下载 🚨 如果你正在使用 UFM-Base 光学流基础模型,这篇文章能帮你避开最常见的 3 个大坑:许可证看错、权重下载失败…

📅 2026/10/22 12:26:06
PJ85718DM+STM32F756ZG工业温控设计:高精度、抗扰与可信温度采集方案

PJ85718DM+STM32F756ZG工业温控设计:高精度、抗扰与可信温度采集方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/22 12:21:05
MORE NEWS

更多资讯

📰

AI Infra全景笔记:从GPU算力到分布式训练与推理的工程体系

不夸张地讲,AI Infra 这个短语,过去两年几乎占据了我所有技术浏览记录里的大半壁江山。但说实话,这词儿看起来唬人,拆开看就是个大杂烩:从机房里的 GPU 裸金属到上层跑模型的推理服务,中间隔着的散热、供电…

📰

Java AI框架停更后,Java做AI应用还有希望吗?

1. 一个停更消息引发的技术选型焦虑 前几天在技术群里看到有人转了一条消息,说某个Java生态的AI框架停更了,群里瞬间炸了锅。有人感叹“Java果然不适合搞AI”,有人开始盘算要不要转Go或者Python,还有人直接甩出一句“Java已死&…

📰

甲骨文目标检测实战:数据集构建与模型训练部署全流程解析

做甲骨文目标检测这件事,我最早是被一个现实问题推进来的:手上攒了两千多张甲骨拓片和照片,需要按字切分、归类、建索引,纯靠人工看,眼睛真的会瞎。于是开始折腾目标检测图像数据集,一路做到这一期的第1034…

📰

泰坦尼克生存分析中的特征工程实战:从数据到因果

1. 项目概述:为什么特征工程是泰坦尼克号生存分析的真正分水岭 “泰坦尼克号乘客生存情况分析之第二部分特征工程”——这个标题里藏着一个被新手普遍低估的真相:模型准确率的天花板,从来不是算法本身,而是你喂给它的数据长什么样…

📰

Java AI框架停更引发焦虑?一文讲透Java在AI应用开发中的真实位置

1. 一个框架停更引发的技术选型焦虑前几天在技术群里看到有人转了一篇文章,标题大意是某个Java生态的AI框架停更了,然后配了一句“Java是不是没戏了”。群里瞬间炸锅,有人说赶紧转Python,有人说Java做AI本来就是伪命题&#xff0c…

📰

TypeSafe Agent Skill:用类型安全约束LLM结构化输出

直接从实战场景聊起吧。我前阵子接了一个内部智能体项目,任务听起来很简单:给用户提交的内容做一次准确度评估。一开始我直接让大模型“自由发挥”,输出一段话来说明它怎么判断。结果很快就被打脸了——我拿到了几十种不同风格的“判断文本”…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬