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

开发者晨报
2025-06-23 21:59
阅读 421

开篇:FastAPI是什么,用来做什么?

开篇:FastAPI是什么,用来做什么?

在开始学习之前,我们先来看看什么是FastAPI?简单来说,它是Python世界中用于创建**Web服务接口(API)**的一个框架。你可以把它想象成一个“厨房工具箱”,里面装满了专门做菜的工具——只不过这里我们做的不是饭,而是可以让别人访问你程序功能的“网页小窗口”。

比如,你想写一个天气预报小程序,别人输入城市名就能看到天气信息,那这个“输入城市名并获取结果”的过程,就是通过API实现的。而FastAPI就是让你能快速搭建这样接口的好帮手!

它有几个特别吸引人的优点:

  • 速度快:性能可以媲美Go和Node.js
  • 代码简洁:用Python就可以写出强大功能
  • 自动生成文档:它能自动给你生成漂亮的API说明页面(省去大量写文档的时间)
  • 适合初学者但不肤浅:既能轻松上手,又能满足实际项目需求

所以如果你是零基础想学后端开发,又希望掌握实用且现代的技术,那么FastAPI是一个非常适合的切入点。


环境准备:让电脑准备好开工!

环境准备:让电脑准备好开工!

我们要开始写代码了!首先,你需要给电脑安装好必要的软件。别担心,这一部分我们会一步步带你走完。

1. 安装 Python

FastAPI 是基于 Python 的,所以第一步当然要确保你的电脑上安装好了 Python。

Windows系统:

  • 访问官网下载:https://www.python.org
  • 下载最新的稳定版本(推荐3.9或更新的版本)
  • 安装时请勾选 “Add to PATH” 选项

Mac用户:

Mac自带Python,但我们建议使用 pyenv 或 Homebrew 来管理多个版本。

Linux用户:

大多数Linux发行版已经安装了Python,你可以使用终端检查版本:

python --version

如果提示未找到命令,请尝试:

python3 --version

如果没有安装Python,请自行搜索如何在你的Linux系统上安装最新Python(通常很简单)。

2. 创建虚拟环境(可选但强烈建议)

我们可以为我们的FastAPI项目单独创建一个“隔离空间”——这就是所谓的虚拟环境。这样不会影响别的Python项目。

# 创建一个叫 my_fastapi_env 的虚拟环境
python -m venv my_fastapi_env

# 激活虚拟环境(Windows)
my_fastapi_env\Scripts\activate.bat

# 激活虚拟环境(Mac/Linux)
source my_fastapi_env/bin/activate

激活之后,你会看到命令行前面出现一个 (my_fastapi_env) 的前缀,表示你现在在这个环境里。

3. 安装 FastAPI 和 Uvicorn(服务器)

接下来我们要安装两个重要组件:

  • FastAPI:构建API的核心库
  • Uvicorn:运行FastAPI应用的ASGI服务器(就像一个能让你的网站跑起来的“启动器”)
pip install fastapi uvicorn

🎉 好了!现在你的电脑已经准备好开始开发FastAPI项目啦!


核心概念讲解:最简单的语言说清楚最难懂的概念

1. API 是什么?为什么重要?

API全称叫做 Application Programming Interface(应用程序编程接口),听上去有点吓人,其实你可以理解成一种“沟通方式”——就像点菜和服务员对话一样。

举个例子:你打开微信发一条消息,背后的微信服务器是怎么知道你要发送这条内容的呢?这就要靠它的API来完成通信。

API的作用就是让我们写的程序可以和其他程序交换数据和功能。

FastAPI 就是用来帮你快速写出这些“对话接口”的工具。


2. 请求方法(HTTP Methods)

常见的几种请求方式:

方法 用途 类似于
GET 获取数据 查看文章
POST 提交数据 发送表单、添加内容
PUT 更新数据 修改某个条目
DELETE 删除数据 删除一条记录

在FastAPI中,每个方法都有对应的函数装饰器(Decorator),比如:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")       # 当有人访问 "/" 路径时,会执行这个函数
def read_root():
    return {"message": "Hello, World!"}

@app.post("/submit")  # 接收提交数据
def submit_data():
    return {"status": "Data received"}

3. 路由(Router)

路由指的是URL路径。你访问不同的URL,程序就会做出不同的响应。

比如:

  • /users:查看所有用户
  • /users/1:查看ID为1的用户
  • /users/1/edit:编辑ID为1的用户

FastAPI 通过函数注解的方式设置路由非常直观,比如:

@app.get("/items/{item_id}")
def get_item(item_id: int):
    return {"id": item_id, "name": "Item " + str(item_id)}

当你访问 /items/5 时,会返回:

{"id": 5, "name": "Item 5"}

是不是很像在写函数?


4. 数据模型与Pydantic

有时候我们需要接收结构化的数据,例如一个用户的注册信息(用户名、密码、邮箱等)。这时候我们就可以使用 Pydantic模型,这是FastAPI内置的一个数据验证模块。

示例:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

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

@app.post("/register")
def register_user(user: UserCreate):
    return {
        "message": "User registered",
        "username": user.username,
        "email": user.email
    }

当你调用这个接口时,必须传入包含这三个字段的数据,否则FastAPI会自动报错,并告诉你缺了哪个字段。


5. 自动生成文档界面

FastAPI 最棒的功能之一就是它会自动生成API文档,无需手动编写!

运行以下命令启动服务:

uvicorn main:app --reload

然后访问下面两个链接,你会看到漂亮的交互式文档界面:

你可以在界面上直接测试每一个API接口!


实战项目:从零开始搭建一个简易笔记应用 📝

为了帮助你真正动手实践,下面我们一起来做一个简单的“笔记管理”系统。

功能目标:

  • 创建笔记(POST)
  • 查看所有笔记(GET)
  • 查看指定笔记(GET /{note_id})
  • 删除笔记(DELETE)

第一步:初始化项目文件夹结构

创建一个项目目录,比如 fastapi-notes-app,并在其中新建一个文件 main.py

结构如下:

fastapi-notes-app/
└── main.py

第二步:定义数据模型

我们将使用一个内存中的列表来保存笔记数据。同时定义一个笔记的Pydantic模型。

from fastapi import FastAPI
from pydantic import BaseModel
from typing import List

app = FastAPI()

# 笔记数据模型
class NoteBase(BaseModel):
    title: str
    content: str

class Note(NoteBase):
    id: int

notes = []
next_id = 1

第三步:添加API接口

现在我们来逐步添加API。

创建笔记:POST

@app.post("/notes", response_model=Note)
def create_note(note: NoteBase):
    global next_id
    new_note = Note(id=next_id, **note.dict())
    notes.append(new_note)
    next_id += 1
    return new_note

查看所有笔记:GET

@app.get("/notes", response_model=List[Note])
def get_notes():
    return notes

查看指定笔记:GET /{note_id}

from fastapi import HTTPException

@app.get("/notes/{note_id}", response_model=Note)
def get_note(note_id: int):
    for note in notes:
        if note.id == note_id:
            return note
    raise HTTPException(status_code=404, detail="Note not found")

缓存策略对比-1

删除笔记:DELETE

@app.delete("/notes/{note_id}")
def delete_note(note_id: int):
    for idx, note in enumerate(notes):
        if note.id == note_id:
            del notes[idx]
            return {"message": "Note deleted"}
    raise HTTPException(status_code=404, detail="Note not found")

第四步:运行项目并测试接口

保存文件后,在终端运行:

uvicorn main:app --reload

然后访问 http://localhost:8000/docs 进入Swagger文档界面,点击任意一个接口进行测试!

比如你可以试试:

  1. /notes 接口点击【Try it out】 ➤ 输入标题和内容 ➤ Execute
  2. 再用 GET /notes 查看你刚添加的笔记
  3. 用 DELETE 删除某条笔记试试看

常见问题解答 🧐

Q1:启动时报错:No module named 'fastapi'

这说明没有正确安装 FastAPI。请确认你在虚拟环境中,并运行:

pip install fastapi uvicorn

Q2:访问 localhost:8000 返回 404

这是因为你还没有定义根路径(如 @app.get("/")),或者写错了URL。请检查代码中是否有拼写错误。


Q3:文档页面无法访问怎么办?

确认你的服务是否正在运行(终端应该显示 Server running on...)。如果不是,请重新运行:

uvicorn main:app --reload

Q4:我怎么传递数组或者复杂数据?

使用 Pydantic 模型,你可以很方便地处理嵌套数据结构。例如:

class UserInfo(BaseModel):
    name: str
    hobbies: List[str]

@app.post("/user")
def create_user(user: UserInfo):
    return user

学习建议:下一步怎么继续进阶?

恭喜你完成了第一个FastAPI应用!但这只是刚开始,真正的后端世界还有很多好玩的东西等着你去探索。

下面是一些推荐的学习方向:


✅ 推荐学习顺序:

  1. 数据库连接

    • 使用SQLAlchemy操作PostgreSQL或SQLite
    • ORM概念初步了解
    • 参考官方教程或SQLModel(更轻量级ORM)
  2. 身份认证与权限控制

    • 用户登录、JWT令牌、Token验证
    • 使用OAuth2协议
  3. 部署上线

    • 使用Docker打包应用
    • 部署到云平台(如Vercel、Render、阿里云等)
  4. 异步编程

    • 使用async def定义API函数
    • 更高效处理并发请求
  5. 前端对接

    • 使用JavaScript+Fetch或Axios调用API
    • 搭配React/Vue/Angular练习前后端分离

📚 推荐学习资源:

资源类型 名称 地址
官方文档 FastAPI Documentation https://fastapi.tiangolo.com
中文社区 FastAPI中文网 https://fastapi.xiaomotou.com
教程视频 Bilibili相关课程 搜索“FastAPI入门”
书籍推荐 《FastAPI实战》 可搜索电子版或纸质书

💡 学习建议总结:

  • 多写多练,不要怕出错,出错才是进步的机会
  • 尝试将本项目扩展,比如加入分类标签、修改笔记功能等
  • 加入开发者社群,分享经验、提问交流

结语 🎉

恭喜你读到了最后!

从你阅读这篇文章那一刻起,你就已经成为一名后端开发者了。虽然刚刚起步,但你已经有了构建API的能力,甚至已经开始理解一些专业的概念,这非常了不起!

记住一句话:“编程不是学会的,是练出来的”。希望你能跟着这篇教程一直练下去,未来有一天成为真正的技术高手,写出属于自己的伟大作品!

如果你喜欢这样的教学风格,欢迎点赞、收藏、转发,让更多同学也能接触到这项有趣的技术 😊

评论 0

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