从零接触FastAPI框架,今日学习day04
一、前期回顾昨天我们了解了什么是ORM以及使用ORM的优势以及如何在Fast API中集成数据库二、今日学习模型设计如何使用 Tortoise ORM 定义数据表结构数据库迁移使用 Aerich 工具管理数据库版本接口开发实现一个基于单表的用户登录接口安全提示本文示例为教学演示密码采用明文存储。在生产环境中请务必使用passlib或bcrypt对密码进行哈希加密处理三、创建模型、模块导出、Aerich 数据库迁移。创建模型1、在我们创建的app软件包的目录下创建一个models的软件包在里面用于创建模型在app软件包下创建一个user.py的文件我们可以在这个文件中创建一个user模型定义一些需要的字段from tortoise import models, fields class User(models.Model): id fields.IntField(pkTrue) username fields.CharField(max_length50,uniqueTrue) password fields.CharField(max_length50) email fields.CharField(max_length100,uniqueTrue) created_at fields.DatetimeField(auto_now_addTrue) class Meta: tablet_user我们可以看到User模型继承了tortoise下的modls然后一定要写id这个为模型中的主键然后其他字段可以根据使用需求来增加一些约束比如username这个字段可以增加唯一约束增加一些字数限制的约束以下为一些常用的字段类型模块导出创建好模型后我们需要导出User模型在app/models/init.py文件中进行导出from app.models.user import User __all__ [User] #一边俩下划线Aerich 数据库迁移什么是AerichAerich是一个专为Tortoise ORM设计的数据库迁移工具。核心功能自动生成迁移文件对比当前模型定义与数据库实际状态自动生成增量 SQL 变更脚本。版本化管理通过迁移文件记录数据库结构的演进历史支持升级和回滚。CLI 驱动提供命令行工具如aerich init-db,aerich migrate,aerich upgrade来管理整个迁移生命周期。多数据库支持兼容 PostgreSQL、MySQL、SQLite 等 Tortoise ORM 支持的后端。首次迁移生成迁移文件aerich init -t app.config.TORTOISE_ORM-t后面为数据库配置的TORTOISE_ORM路径即为app目录下的config文件下的TORTOISE_ORM常量名后续自己在做练习的时候不在这个目录下记得要更改这个生成迁移文件的命令初始迁移并应用到数据库此命令只能第一次执行迁移时使用aerich init-db#第二次及以后生成迁移文件aerich migrate --name 描述名--name 描述名可加可不加加的话就是给你的迁移文件生成一个名字#第二次及以后迁移并应用到数据库aerich upgrade四、单表增删改查现在准备工作基本完成我们可以进行写表的增删改查接口了创建专门写接口的文件我们在前面每创建一个模型就单独创建一个文件在写接口的文档也是同理我这里在app目录下创建了个叫api的软件包里面专门存放写的接口文件在里面创建一个user.py的文件写user的接口逻辑打开app/api/user.py文件下写入写入先创建一个路由器APIRouterfrom fastapi import APIRouter user_router APIRouter( prefix/users, tags[用户], )我们先写一个简单的登录接口没有返回token和加密的在app下创建一个叫schemas的软件包然后在软件包下创建一个user.py文件定义pydantic对象,接受前端传递的json参数:# 从 pydantic 库中导入 BaseModel 和 Field 两个核心类 # pydantic 是一个用于数据验证和设置管理的 Python 库 from pydantic import BaseModel, Field # 定义一个用户创建请求的数据模型类 # 继承自 BaseModel这是 pydantic 中定义数据模型的基础类 class UserLogin(BaseModel): #Field中可以进行一些校验或限制比如...为必传参数None为可传可不传 username:strField( ..., title用户名, description用户名, exampleadmin ) password:strField( ..., title密码, description密码, example123123 )在app/api/user.py下写#装饰器post请求的路由 user_router.post(/login) # async 关键字声明这是一个异步函数可以使用 await 调用异步操作 async def get_user(user_request:UserLogin): # await与async同时出现有async必须要加await user await User.filter(usernameuser_request.username, passworduser_request.password).first() if not user: return {code:400,msg:用户名或密码错误} return {code:200,msg:登录成功,data:{username:user.username,user_id:user.id}}在main.py中将路由器挂载到主 FastAPI 应用# 从 user 模块导入路由器实例 from app.api.user import user_router # 将路由器挂载到主 FastAPI 应用 app.include_router(user_router)连接数据库先添加个数据我这里选择用软件自带的数据库添加完之后然后来接口文档测试一下输入uvicorn main:app --reload启动点击测试登录成功五、总结一、 核心知识脉络本次学习完成了从数据库模型设计到接口落地的完整闭环主要涵盖三大模块模型层使用 Tortoise ORM 定义User模型掌握主键声明、字段约束唯一/长度及元数据表名配置并通过__all__规范模块导出。迁移层引入 Aerich 工具管理数据库版本区分首次初始化init-db与后续迭代migrateupgrade的命令差异实现模型变更的增量同步。接口层基于APIRouter模块化组织路由结合 Pydantic Schema 完成请求参数校验实现异步登录查询接口并挂载至主应用。二、 关键技术要点Tortoise ORM 规范模型必须继承models.Model且显式定义pkTrue的主键字段所有数据库操作均为异步必须配合await使用。Aerich 命令边界aerich init-db仅限项目首次执行后续任何模型修改严禁重复使用该命令否则会导致迁移历史混乱。Pydantic 校验使用Field(...)标记必填参数通过title/description/examples增强 Swagger 文档可读性注V2 版本推荐使用examples替代example。路由模块化通过APIRouter(prefix, tags)定义子路由再经app.include_router()挂载避免单文件代码膨胀。三、 避坑与安全提醒密码安全当前示例为明文存储密码仅用于教学演示。生产环境必须使用passlib/bcrypt进行哈希加密同时建议将密码字段长度调整为 255 以容纳哈希值。循环导入模型、Schema、路由文件之间需保持单向依赖避免交叉引用导致ImportError。迁移配置路径aerich init -t后的配置路径必须与实际项目中TORTOISE_ORM常量的位置完全一致路径错误会导致迁移失败。

相关新闻

软路由玩家必备:OpenWRT桥接模式秒变旁路由的隐藏技巧

软路由玩家必备:OpenWRT桥接模式秒变旁路由的隐藏技巧

OpenWRT桥接模式高阶应用:打造智能旁路由的完整指南 对于网络爱好者而言,OpenWRT系统的魅力在于其无限的可定制性。当大多数教程还在讨论基础桥接设置时,我们已经可以将这种模式玩出全新高度——将桥接模式下的OpenWRT设备转变为功能强大的旁路由。这种配置不仅能保留主路由…

2026/10/17 16:45:52 阅读更多 →
TPU如何颠覆英伟达GPU的AI霸权?谷歌的十年逆袭之路

TPU如何颠覆英伟达GPU的AI霸权?谷歌的十年逆袭之路

📌 目录从算力危机到格局颠覆:谷歌TPU十年逆袭史,如何打破英伟达GPU垄断?一、危机催生创新:2013年的算力困局,孕育TPU的诞生二、十年磨一剑:TPUv5p的爆发,性能与成本的双重碾压&…

2026/10/18 9:08:17 阅读更多 →
DecoTV注册功能详解:临时开启与安全管理最佳实践

DecoTV注册功能详解:临时开启与安全管理最佳实践

DecoTV注册功能详解:临时开启与安全管理最佳实践 【免费下载链接】DecoTV 基于最新版LunaTV二次开发的一个开箱即用的、跨平台的影视聚合播放站。【原KatelyaTV】 项目地址: https://gitcode.com/gh_mirrors/de/DecoTV DecoTV作为一款基于LunaTV二次开发的跨…

2026/10/18 2:07:52 阅读更多 →

最新新闻

大模型三大架构:Encoder-only、Decoder-only与Encoder-Decoder选型指南

大模型三大架构:Encoder-only、Decoder-only与Encoder-Decoder选型指南

我身边不少搞算法的朋友,上手大模型就是直接调对话式API。跑文本分类、做实体抽取、相似度匹配,全走同一套生成式接口,结果有时候能用,有时候特别离谱。其实问题不在模型能力,而是大多数情况下把架构选错了。大模型的三…

2026/10/19 6:01:37 阅读更多 →
综合材料手作的艺术与工艺:木艺、环氧树脂与黄铜的融合实践

综合材料手作的艺术与工艺:木艺、环氧树脂与黄铜的融合实践

1. 项目定位与整体设计思路1.1 “artcraft”到底想做什么“artcraft”这个名字,拆开来看就是 Art 和 Craft 的组合。很多人第一次听到会以为是一个艺术展览,或者是一个工艺品售卖品牌。其实我做这个项目的时候,想法很直接:把“只可…

2026/10/19 6:01:37 阅读更多 →
Transformer时序长期预测实战:可复现的工程化方案

Transformer时序长期预测实战:可复现的工程化方案

简介:本资源是一份基于PyTorch实现的Transformer模型长期时间序列预测完整代码工程,面向深度学习初学者与时间序列建模实践者,聚焦解决电力负荷、气象或工业传感器等场景下的多步长未来趋势预测问题。项目包含39个文件,涵盖13个核…

2026/10/19 6:01:37 阅读更多 →
长周期时序预测Transformer实战:从OOM到毕设可交付方案

长周期时序预测Transformer实战:从OOM到毕设可交付方案

简介:本资源是一套基于PyTorch实现的Transformer模型长期时间序列预测完整代码工程,面向深度学习初学者与时间序列分析实践者,聚焦解决传统RNN在长程依赖建模中的梯度衰减与并行性不足问题。项目复现了Transformer核心结构(含多头…

2026/10/19 6:01:37 阅读更多 →
编译原理期末卷高分攻略:正规式、LL(1)与四元式核心考点拆解

编译原理期末卷高分攻略:正规式、LL(1)与四元式核心考点拆解

简介:这份常州工学院编译原理试卷A(doc格式,压缩包约55KB,共1个文件)面向高校计算机专业学生及备考编译原理课程的读者,用于检验和巩固课程核心知识点。试卷内容覆盖正规表达式与有限自动机、逆波兰表示、文…

2026/10/19 6:01:37 阅读更多 →
Docker容器隔离与网络通信原理:从namespace到iptables一网打尽

Docker容器隔离与网络通信原理:从namespace到iptables一网打尽

先说个现象:很多人本机用Docker跑一两个容器,感觉一切都很美好;可一旦项目多起来,要同时起十几个服务,最让人头疼的一定是网络。容器之间互相不通、端口映射诡异失效、跨主机通信直接懵圈,这些问题几乎每个…

2026/10/19 6:00:36 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

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

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/18 12:16:16 阅读更多 →