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

Flutter 组件 dcql 的适配 鸿蒙Harmony 实战 - 驾驭去中心化查询语言、实现鸿蒙端复杂数据资产审计与逻辑门禁方案

Flutter 组件 dcql 的适配 鸿蒙Harmony 实战 - 驾驭去中心化查询语言、实现鸿蒙端复杂数据资产审计与逻辑门禁方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 dcql 的适配 鸿蒙Harmony 实战 - 驾驭去中心化查询语言、实现鸿蒙端复杂数据资产审计与逻辑门禁方案 前言 在鸿蒙(OpenHarmony)生态的分布式金融节点、跨机构数据资产交换、以及对隐私保护有极高要求的去中心化身份(DID)审计场景中,“数据筛选与合规判定”的逻辑通常分布在互不信任的多个节点之间。面对需要在客户端执行极其复杂的“如果用户信誉分 > 80 且 账户余额 > 1000 且 拥有 0307 批次资产”这类逻辑组合判定。如果仅仅依靠写死的 Hard-code 代码。那么不仅无法应对逻辑规则的频繁变动(如审计标准调整)。更会因为缺乏确定性的执行引擎。引发各端判定结果不一致的“逻辑分歧”。 我们需要一种“逻辑即数据、查询即验证”的去中心化艺术。 dcql

By Ne0inhk
Flutter 三方库 remove_markdown 的鸿蒙化适配指南 - 打造纯净文本提取、内容预处理实战、鸿蒙级文本解析专家

Flutter 三方库 remove_markdown 的鸿蒙化适配指南 - 打造纯净文本提取、内容预处理实战、鸿蒙级文本解析专家

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 remove_markdown 的鸿蒙化适配指南 - 打造纯净文本提取、内容预处理实战、鸿蒙级文本解析专家 在鸿蒙跨平台应用处理海量的 Markdown 博文、技术文档或用户输入的富文本内容时,有时我们需要剥离所有的样式标记(如加粗、链接、列表),还原出最原始、最纯洁的文字内容。如果你需要为搜索索引构建、智能语音播报(TTS)或是内容摘要生成提供高质量的数据源。今天我们要深度解析的 remove_markdown——一个专注于高效、无损 Markdown 语法剥离的轻量级 Dart 库,正是帮你实现“内容减负”的核心引擎。 前言 remove_markdown 是一套基于正则表达式与高效字符扫描的转换工具。它的设计初衷极其明确:将复杂的 Markdown 源码瞬间坍缩为易于阅读和处理的纯文本。在鸿蒙端项目中,利用它你可以确保在展示搜索片段(

By Ne0inhk
Flutter for OpenHarmony: Flutter 三方库 shamsi_date 助力鸿蒙应用精准适配波斯历法(中东出海必备)

Flutter for OpenHarmony: Flutter 三方库 shamsi_date 助力鸿蒙应用精准适配波斯历法(中东出海必备)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在进行 OpenHarmony 的全球化(Internationalization)应用开发时,进军中东市场(尤其是波斯语地区)是一项充满潜力的战略。但在这些地区,用户习惯使用的并非公历(Gregorian),而是 波斯历(Shamsi/Jalali)。 1. 如何将用户的生日从公历转换成波斯历? 2. 鸿蒙应用的时间轴、日历选择器如何呈现 Jalali 格式? 3. 业务系统中的合同到期日如何按波斯历进行逻辑计算? shamsi_date 是 Dart 生态中处理波斯历法的权威库。它提供了极其简单的转换 API,是你开发鸿蒙出海应用、打入中东市场的关键技术补丁。 一、历法转换算法模型 shamsi_date 实现了公历与波斯历之间的双向精准映射。 Conversion Conversion 公历 (2024-02-20) 波斯历 (1402-12-01)

By Ne0inhk
Flutter for OpenHarmony:Flutter 三方库 money2 — 坚不可摧的鸿蒙金融核心组件

Flutter for OpenHarmony:Flutter 三方库 money2 — 坚不可摧的鸿蒙金融核心组件

欢迎加入开源鸿蒙跨平台社区:开源鸿蒙跨平台开发者社区 前言 如果您正在开发的 Flutter for OpenHarmony 应用涉及金融核算、商城交易或任何带有财务账单的业务,那么对金额的精确处理将极其关键。 在传统开发中,如果直接使用系统基础的 Double 类型进行财务计算(例如 0.1 + 0.2 会变成 0.30000000000000004),极易导致对账失败,严重时甚至会引发系统性的财务灾难。 money2 这个开源组件正是为了防止这种浮点运算精度丢失而生。它在底层基于大整数操作结合位移来处理金额金额,从而绝对保证在进行复杂的金融计算时,不会丢失哪怕一丝一毫的精度。 一、原理解析 / 概念介绍 1.1 基础概念 money2 绝不仅仅是一堆简单的加减工具函数。其核心思想是使用大整数来表示货币的最小面值单位。例如 1.25 美元,它在底层对象中实际被安全地存储为代表分的大整数 125 和指数 -2。这里面完全规避了极其危险的浮点操作。 系统原始 1.2

By Ne0inhk