FastAPI入门:Python后端开发新手指南

算法大师
2025-06-26 04:44
阅读 237

开篇:FastAPI是什么?我能用它做什么?

开篇:FastAPI是什么?我能用它做什么?

你好!欢迎来到《FastAPI入门》教程。在这篇文章中,我们将一起学习 FastAPI,这是一个用 Python 写的现代化后端框架,特别适合做 API(接口)服务。

为什么选 FastAPI?

  1. 速度快:基于 Python 异步特性,性能接近 Node.js 和 Go。
  2. 自动生成文档:访问 /docs 就能看到你写的接口说明页面(自带 UI 界面)。
  3. 类型友好:支持 Python 的类型提示(Type Hint),让你的代码更清晰、更安全。
  4. 轻量级:简单易学,不依赖复杂配置,上手非常快!

它能用来做什么?

FastAPI 常用于:

  • 做小程序或 App 后台接口(例如登录注册、数据查询等)
  • 搭建网站后台的数据处理模块
  • 创建企业内部系统之间的数据通信桥梁
  • 结合数据库进行数据增删改查操作

总之,它是一个“把你的 Python 代码暴露给其他设备使用”的好工具。


环境准备:让我们先搭个舞台

环境准备:让我们先搭个舞台

要开始写 FastAPI 项目,你需要安装一些必要的软件和库。我们一步步来:

步骤一:安装 Python

确保你已经安装了 Python 3.8 及以上版本。你可以打开命令行输入以下命令查看:

python --version

如果没有安装,可以去 Python官网 下载最新版。

步骤二:安装 FastAPI 和 Uvicorn

我们可以使用 pip 安装 FastAPI 及其运行服务器 Uvicorn:

pip install fastapi uvicorn

小贴士

  • fastapi 是核心框架
  • uvicorn 是 FastAPI 的启动器,类似一个“小服务器”

核心概念:用最简单的语言讲清楚关键点

核心概念:用最简单的语言讲清楚关键点

学习任何新技术前,先了解它的基本组件会事半功倍。下面是一些 FastAPI 最基础也最重要的概念:


1. 路由(Route)——你是怎么找到这个功能的?

想象一下你在访问某个网页,比如:

https://example.com/user/profile

URL 中 /user/profile 这部分就是“路由”。在 FastAPI 中,我们通过装饰器定义这些路径。

示例代码:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def home():
    return {"message": "欢迎来到主页"}
  • @app.get("/") 表示当用户访问根路径时,调用 home() 函数。
  • 你可以换成 @app.post() 来创建 POST 请求接口。

2. 请求方法(HTTP Method)——你希望别人怎么使用你提供的功能?

常见的 HTTP 方法有:

方法 用途
GET 获取数据(比如获取用户信息)
POST 提交数据(比如注册账号)
PUT 更新数据(比如修改个人信息)
DELETE 删除数据

示例代码(新增一个 POST 接口):

@app.post("/register")
def register_user(name: str, password: str):
    return {
        "name": name,
        "status": "注册成功"
    }

当你发送一个 POST 请求到 /register,就能接收到传入的参数并返回结果。


3. 参数传递方式——怎么让别人告诉你要执行什么内容?

在请求中,可以通过多种方式传参数:

a) 查询参数(Query Parameters)

就是在 URL 后加上问号后面的参数,比如:

http://localhost:8000/search?query=苹果

FastAPI 自动识别这些参数:

@app.get("/search")
def search(query: str):
    return {"result": f"你搜索的内容是:{query}"}

b) 路径参数(Path Parameters)

嵌在路径里的参数,常用于表示 ID 或用户名:

@app.get("/user/{user_id}")
def get_user(user_id: int):
    return {"user_id": user_id}

访问 /user/123 时,输出 { "user_id": 123 }

c) 请求体参数(Body Parameters)

适用于 POST、PUT 等方法,数据以 JSON 形式提交:

from pydantic import BaseModel

class UserCreate(BaseModel):
    username: str
    email: str

@app.post("/users/")
def create_user(user: UserCreate):
    return {"message": "用户已创建", "user": user}

这里用到了 Pydantic 来自动校验请求体中的字段是否正确。


4. 自动生成文档 Swagger 和 ReDoc ——不用手动写接口文档啦!

FastAPI 非常强大的一个功能是,它可以自动为你生成接口文档!


实战项目:从零开始搭建一个天气查询接口

数据库设计模型-1

理论讲得差不多了,现在我们动手做一个小项目吧!

目标:构建一个可以根据城市名查询当前天气的小型接口。

第一步:编写接口结构

from fastapi import FastAPI

app = FastAPI()

@app.get("/weather")
def get_weather(city: str):
    return {"city": city, "temperature": "25°C", "condition": "晴天"}

保存为文件 main.py

第二步:运行服务器

在终端运行下面这条命令:

uvicorn main:app --reload
  • main: 指向你的 Python 文件名(不含 .py)
  • app: 你实例化的 FastAPI 对象变量名
  • --reload:热重载模式,在开发时自动重启服务器(生产环境中不要用)

现在你可以访问下面两个链接:

试着在文档里调用 /weather 接口,传入城市名如 Shanghai,你会得到一个模拟的天气回复。


常见问题解答区 🧾

Q1:运行时提示“找不到 uvicorn”怎么办?

A:可能是虚拟环境未激活或 pip 安装目录不在系统路径中。尝试重新安装或检查 PATH 设置。

Q2:POST 请求总是报错 “invalid json”

A:检查你的 JSON 格式是否有语法错误,或者是否遗漏了必要的字段(尤其是用了 Pydantic 模型的情况下)。

Q3:如何在本地调试代码时自动重启?

A:添加 --reload 参数即可。但切记只用于开发阶段,不要在正式生产环境使用!

Q4:我写的接口为什么在浏览器里无法看到响应?

A:确保使用正确的 URL 格式访问,并且没有拼写错误。另外某些浏览器会拦截非 HTML 类型响应,请使用 Postman 或 curl 测试。


学习建议:下一步该怎么学下去?

数据流转过程-2

恭喜你完成 FastAPI 的第一次实战练习!接下来推荐你继续学习的方向如下:

✔️ 阶段一:进阶知识点

  • 使用 Pydantic 做复杂的参数校验
  • 添加中间件(Middleware)处理统一日志或权限控制
  • 使用异步函数提升性能
  • 数据库连接:集成 SQLAlchemy 或 Tortoise ORM

✔️ 阶段二:部署上线

  • 打包为 Docker 镜像
  • 使用 Nginx+Uvicorn 部署生产环境
  • 使用 Gunicorn 或 Hypercorn 多进程管理

🔍 推荐资源


结语:FastAPI 很快,学习也不慢

虽然我们只是迈出了第一步,但你会发现,FastAPI 的学习曲线并不陡峭。只要你敢写第一行代码,后面的一切都会变得越来越有趣。

祝你编程愉快,成为未来出色的后端开发者!🎉


📌 附录:完整示例代码整理

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class UserCreate(BaseModel):
    username: str
    email: str

@app.get("/")
def home():
    return {"message": "欢迎来到 FastAPI"}

@app.get("/user/{user_id}")
def get_user(user_id: int):
    return {"user_id": user_id}

@app.post("/users/")
def create_user(user: UserCreate):
    return {"message": "用户已创建", "user": user}

@app.get("/weather")
def get_weather(city: str):
    return {"city": city, "temperature": "25°C", "condition": "晴天"}

复制上面代码试试看,你已经具备了一个迷你后端的功能了!💡

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝