【超详细】Python FastAPI 入门:写给新手的“保姆级”教程

【超详细】Python FastAPI 入门:写给新手的“保姆级”教程

前言

 作为一名大学生,最近在做 Python Web 开发时发现了一个“宝藏”框架——FastAPI。 以前学 Django 光配置就头大,学 Flask 又不知道怎么写规范。直到遇到了 FastAPI,我才体会到什么叫“写代码像呼吸一样自然”。 这篇文章不讲复杂的原理,只讲最基础、最实用的操作,带你从 0 到 1 跑通第一个 API 接口!

一、FastAPI 是什么

在 Python 的世界里,做网站后台(Web 开发)主要有三巨头:

1. Django:老大哥,功能全但笨重,像一辆重型卡车。 2. Flask:二哥,轻便灵活但插件多,像一辆自行组装的赛车。 3. FastAPI:新晋顶流,快、自动生成文档、代码这种查错,像一辆自动驾驶的特斯拉。

为什么新手首选 FastAPI?不写文档:代码写完,接口文档自动生成(Swagger UI)。少写 Bug:利用 Python 的类型提示,参数传错了直接报错,不会等到运行一半才崩溃。 简单:Hello World 只需要 5 行代码。

二、环境搭建(避坑指南)

1. 安装

很多新手第一步就倒在了环境上,跟着我做,保证没问题。

FastAPI 依赖 Python 3.8 及更⾼版本,需要Python3.8以上的解释器,第一步是下载FastAPI模块(如果已经下载可以忽略)

pip install fastapi -i https://mirrors.aliyun.com/pypi/simple/

-i https://mirrors.aliyun.com/pypi/simple/  是使用了国内的镜像,加快下载

第二步是需要⼀个 ASGI 服务器,⽣产环境可以使⽤ Uvicorn 或者 Hypercorn

pip install "uvicorn[standard]" -i https://mirrors.aliyun.com/pypi/simple/

2.运行与启动

新建一个 `main.py` 文件,写入最简单的代码:

from fastapi import FastAPI import uvicorn # 1. 创建应用实例 app = FastAPI() # 2. 定义路由 @app.get("/") def root(): return {"message": "Hello World"} # 3. 启动入口(也可以在命令行运行) if __name__ == "__main__": uvicorn.run(app="main:app", host="127.0.0.1", port=8000)

这里的 "main:app" 意思是:运行 main.py 文件里的 app 对象

启动服务的方式有2个:

第一个是在代码上面写入if __name__ == "__main__":
    uvicorn.run(app="main:app", host="127.0.0.1", port=8000)语句直接运行启动

第二个是点开终端

然后输入下面的代码启动服务

uvicorn main:app 

个人推荐第一个^_^

启动后访问 `http://127.0.0.1:8000`,你会看到返回的JSON数据:

恭喜你!你的第一个 Web 接口已经跑通了!🎉

三、FastAPI的核心魔法:自动文档

这是 FastAPI 最让隔壁 Java 同学羡慕哭的功能。因为你不需要写任何一行文档代码,FastAPI 已经帮你写好了。 打开浏览器,访问:http://127.0.0.1:8000/docs
你会看到一个狂拽酷炫的 Swagger UI界面。这是 FastAPI 根据你的代码自动生成的接口文档。以前:写完接口 -> 打开 Postman -> 填 URL -> 填参数 -> 发送 -> 报错 -> 改代码... 现在:直接在网页上点 `Try it out`,填参数,执行

四、怎么接收数据?(核心基础)

做后端最主要的工作就是:接收前端的数据 -> 处理数据 -> 返回结果。 FastAPI 接收数据主要有两种方式,新手必须掌握。

1. 路径参数 (Path Parameters)

场景:你要查询 ID 为 5 的学生信息,网址通常是 `http://.../student/5`。 代码这样写:

from fastapi import FastAPI import uvicorn app = FastAPI() @app.get("/student/{student_id}") # 注意花括号 {} def get_student(student_id: int): # 注意这里写了 : int return { "学生ID": student_id, "类型": str(type(student_id)) } if __name__=="__main__": uvicorn.run(app="main:app",host="127.0.0.1",port=8088)

新手看细节: 我在函数参数里写了 `student_id: int`。 如果你访问 `/student/5`,FastAPI 会自动把 `5` 转换成整数,如果你访问 `/student/abc`,FastAPI 会直接给你报错,提示你“我们要的是整数,你给的是字符串”。 这就是类型检查的强大之处!

2. 查询参数 (Query Parameters)

场景:类似百度的搜索,网址是 `http://.../search?keyword=python&page=1`。 在 FastAPI 里,只要函数参数里写的变量,没在路径里出现,就是查询参数。
from fastapi import FastAPI import uvicorn app = FastAPI() @app.get("/search") def search_data(keyword: str, page: int = 1): # page=1 是默认值 return { "你搜的词": keyword, "当前页码": page } if __name__=="__main__": uvicorn.run(app="main:app",host="127.0.0.1",port=8088)
访问 /search?keyword=apple   返回 `keyword=apple`, `page=1` (默认值)。 

访问 /search?keyword=apple&page=5   返回 `keyword=apple`, `page=5`。

五、最强功能:Pydantic 数据模型

如果你要做注册功能,前端会发来一堆数据(用户名、密码、年龄...)。 如果参数太多,一个一个写在函数里太乱了。FastAPI 引入了Pydantic来定义数据的“形状”。 这是重点中的重点,一定要看懂!
from fastapi import FastAPI import uvicorn from pydantic import BaseModel # 1. 导入 BaseModel app = FastAPI() # 2. 定义一个类,继承 BaseModel # 这就像是制定一个“表格”,前端传来的数据必须符合这个表格 class UserInfo(BaseModel): username: str password: str age: int = 18 # 默认18,如果没传就是18 is_student: bool = True # 是否是学生 # 3. 在接口中使用这个模型 @app.post("/register") def register(user: UserInfo): # 核心:参数类型指定为 UserInfo # FastAPI 会自动把前端传来的 JSON 塞进 user 变量里 # 我们可以直接用 user.username 取值 if user.age < 18: return {"message": "未成年人禁止注册", "code": 400} return { "message": "注册成功", "用户": user.username, "身份": "学生" if user.is_student else "社会人" } if __name__=="__main__": uvicorn.run(app="main:app",host="127.0.0.1",port=8088) 

怎么测试这个 POST 接口?

1. 打开 `/docs` 文档页面。 2. 找到 `/register` 接口。 3. 点击 `Try it out`。 4. 在 Request body 里修改 JSON 数据。 5. 点击 `Execute`。

你完全不用写解析 JSON 的代码,FastAPI 全部帮你做好了!

六、总结与建议

对于新手来说,掌握以上内容,你已经算是一个合格的 FastAPI 入门者了。

回顾一下今天学到的: 1. 安装:pip install fastapi。 2. 启动:uvicorn是启动引擎。 3. 文档:`/docs` 自动生成文档,是测试神器。 4. 参数:利用 Python 的类型提示(`int`, `str`)来约束参数。 5. 模型:用 `BaseModel` 来处理复杂的 POST 数据(如注册登录)。

FastAPI 就像一把趁手的兵器,不仅让你写代码变快,更让你写出规范、健壮的代码。

博主后记

这一篇是基础篇,下一篇博客我会结合 SQLite 数据库,带大家手写一个真正的“用户登录注册系统”,包含数据库增删改查等实战内容,如果你觉得这篇教程对你有帮助,欢迎点赞、收藏、关注!有问题随时在评论区提问,必回!

Read more

【保姆级教程】手把手教你本地部署Open Claw,轻松实现智能爬虫![特殊字符]

【保姆级教程】手把手教你本地部署Open Claw,轻松实现智能爬虫![特殊字符]

🔥 前言 最近Open Claw在爬虫圈火得一塌糊涂!作为一款开源的高性能爬虫框架,它不仅支持分布式爬取,还内置了强大的反爬策略,简直是爬虫工程师的福音! 今天就带大家从零开始,在本地完整部署Open Claw,让你的爬虫效率直接起飞!💪 📝 准备工作 系统要求 * ✅ Windows 10/11 / macOS / Linux * ✅ Python 3.8+ * ✅ 8GB+ 内存(建议16GB) * ✅ 10GB+ 可用磁盘空间 需要安装的软件 1. Python环境(如果还没安装) 2. Git(用于克隆代码) 3. Docker(可选,推荐使用) 🚀 详细部署步骤 Step 1:安装Python依赖库 首先打开终端(Win+R输入cmd),执行以下命令: bash # 升级pip到最新版本 python -m pip

By Ne0inhk
PostgreSQL动态分区裁剪技术:查询性能优化解析(2026年版)

PostgreSQL动态分区裁剪技术:查询性能优化解析(2026年版)

PostgreSQL动态分区裁剪技术:从原理到实战的查询性能优化 一、引言 1.1 研究背景与意义 随着企业数据量从TB级向PB级演进,数据库管理系统面临着严峻的挑战。PostgreSQL作为一款功能强大的开源关系型数据库,凭借其高度的可扩展性和标准兼容性,在金融、电商、物联网等领域得到了广泛应用。然而,在处理海量数据时,如何通过分区裁剪技术精准定位目标数据,避免无关分区的无效扫描,已成为查询性能优化的关键突破口。 在实际应用中,许多场景对查询性能有着极高要求。以电商行业为例,订单数据量庞大,每天可能产生数百万甚至数千万条订单记录。在进行订单查询、统计分析等操作时,如果不能有效利用分区裁剪技术,查询可能会耗费大量时间,严重影响用户体验。又如在金融领域,交易数据的实时查询对于风险控制至关重要,动态分区裁剪技术能够帮助金融机构快速获取所需数据。 1.2 研究目标与范围 本文旨在深入研究PostgreSQL声明式分区表的动态裁剪机制,通过结合源码分析与实际案例,系统地阐述其实现原理、优化策略及性能影响因素。研究目标包括: * 从源码层面深入剖析动态分区裁剪的实现原理 *

By Ne0inhk
从入门到精通【 MySQL】 数据库约束与设计

从入门到精通【 MySQL】 数据库约束与设计

文章目录 * 📕1. 数据库约束 * ✏️1.1 NOT NULL 非空约束 * ✏️1.2 DEFAULT 默认值约束 * ✏️1.3 UNIQUE 唯一约束 * ✏️1.4 PRIMARY KEY 主键约束 * ✏️1.5 FOREIGN KEY 外键约束 * ✏️1.6 CHECK 约束 * 📕2. 数据库设计 * ✏️2.1 第一范式 * ✏️2.2 第二范式 * ✏️2.3 第三范式 * ✏️2.4 设计过程 * ✏️2.5 实体-关系图 📕1. 数据库约束 数据库约束是指对数据库表中的数据所施加的规则或条件,

By Ne0inhk
Flutter for OpenHarmony:Flutter 三方库 bloc_lint — 静态层给架构建立强硬代码纪律法规(架构治理引擎)

Flutter for OpenHarmony:Flutter 三方库 bloc_lint — 静态层给架构建立强硬代码纪律法规(架构治理引擎)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net。 前言 在鸿蒙(OpenHarmony)商业应用构建体系中,BLoC (Business Logic Component) 作为极其受欢迎且久经沙场验证的主流状态管理选项之一,其能够很好的区隔 UI 层与深层次复杂多变业务层。但即便其设计优秀且完善,部分因为初学者对“事件源如何定义”、“状态应当如何闭环抛出和重建”理解错位而在团队项目中引发了诸如事件滥用乱扔的状态泄漏等大型坑底。 bloc_lint 作为一套完全专门为 flutter_bloc 体系打造的规则分析插件,在底层完全接入你最信任的老大哥 IDE 和 CLI 验证中心。它通过对你的源码状态类代码进行扫描,从而逼你建立符合该架构设计真正思想哲学初衷的写法。在想要于庞大极其需要高度共识的企业级鸿蒙项目中推动 BLoC 范式时,它是你的架构卫士。 一、原理展示 / 概念介绍 1.1 基础概念 本机制就像是在 Dart 分析服务器里面插入了由 BLoC 作者参与或者基于经验而设定好的硬性代码规范探针体

By Ne0inhk