【超详细】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

【 C/C++ 算法】入门动态规划-----一维动态规划基础(以练代学式)

【 C/C++ 算法】入门动态规划-----一维动态规划基础(以练代学式)

每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论 : 本章是动态规划算法的基础入门篇,我将通过三道简单题 + 一道中等难度的一维动态规划题来带你对动态规划有个初认识,并基本了解动态规划的最基本常见的写法,只有将基本写法了解了,对后续的难的题目自然也不会毫无头绪,后续还将持续更新更多相关的动规算法,敬请期待~🙃 ———————— 早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。 👻动态规划🌥️ 这里通过大量练习得出下面动态规划做题步骤 简单的说动态规划理解成:某种状态的公式 + 提前求出来值的容器 求出当前位置的值然后放到容器中后后续使用 因为最开始的值一般是会看见的所以就能有初始值,从而启动动态规划 从上中可以主要提炼出: * 状态 * 容器的重要性 * 公式,可以换种说法:状态转移方程 这样严格😈的说:动态规划 = 状态定义 + 状态转移方程 + 初始条件 + 状态存储(容器) 下述步骤是通过写完下述四道题后的总结,所以同样需要道友🗡️大量的练习沉淀最终就能对动态规划的题目

By Ne0inhk
工业相机高速回调 + 异步处理线程:海康 C++ 实战代码深度解析

工业相机高速回调 + 异步处理线程:海康 C++ 实战代码深度解析

工业相机高速回调 + 异步处理线程:海康 C++ 实战代码深度解析 导读:在锂电池极片飞拍、半导体晶圆检测等高速视觉场景中,“相机能跑 90fps,一存图就掉到 20fps”是许多工程师的噩梦。C++ 虽然性能强劲,但若架构设计不当,同样难逃丢帧、内存泄漏的厄运。本文将基于生产者 - 消费者模型 + 环形缓冲队列的核心思想,为你打造一套C++ 版本的高速图像存储方案,并附带海康威视(Hikvision)MVS SDK 的实战代码,助你轻松扛住 4K@60fps 连续写入! 一、痛点直击:为什么你的高速相机总丢帧? 在工业视觉系统中,图像数据流如同洪流: * 带宽巨大:4K@60fps RAW 图像带宽高达 1.8GB/s; * I/O 瓶颈:普通

By Ne0inhk
安装 Microsoft Visual C++ Build Tools

安装 Microsoft Visual C++ Build Tools

Microsoft Visual C++ Build Tools下载安装 安装Microsoft Visual C++ Build Tools是为了在windows系统上编译和运行需要C++支持的程序或库(例如某些Python包,Node.js模块等)。 1.下载 打开浏览器,访问 Visual Studio Build Tools下载页面。 在页面上找到“下载”按钮,点击下载 Build Tools for Visual Studio 的安装程序(vs_BuildTools.exe)。 2. 安装 双击下载好的软件(vs_BuildTools.exe)。 点击继续。 等待下载安装。 在安装Visual Studio Build Tools的时候,选择“C++生成工具”

By Ne0inhk

C++ 函数模板

函数模板(Function Template) 是C++中实现泛型编程的核心工具,它允许编写与类型无关的通用代码。通过函数模板,你可以定义一个函数蓝图,编译器会根据实际使用的类型自动生成具体的函数代码。 基本概念 1. 模板定义 cpp // 定义一个函数模板 template <typename T> // T 是类型参数 T max(T a, T b) { return (a > b) ? a : b; } // 或者使用 class 关键字(和 typename 等价) template <class T> T min(T a, T b)

By Ne0inhk