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

云边有个仓库
2025-06-19 11:24
阅读 555

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

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

在互联网的世界里,后端开发就像是网站或应用背后的“大脑”,它负责处理各种逻辑、管理数据、与数据库沟通等等。如果你听说过“服务器”、“接口(API)”这样的词,那基本都是后端的工作。

FastAPI,是一个专为构建现代化API服务而设计的Python框架。它以速度快、开发效率高、文档自动生成著称,是Python社区中非常流行的一种后端开发方式。

简单来说:

  • 你可以用FastAPI来写一个提供服务的程序(比如微信支付、登录注册等功能背后的服务)
  • 它可以和前端网页、App、小程序等配合使用
  • 学会之后你就能自己搭建功能强大的后端接口了!

接下来,我们就从零开始,一步步走进FastAPI的世界吧 🚀


环境准备:搭建属于你的开发环境

环境准备:搭建属于你的开发环境

系统架构设计图-2

1. 安装Python

首先,我们需要安装Python。推荐大家使用 Python 3.8 及以上版本,因为FastAPI对新特性依赖较多。

如何检查自己的Python是否安装好了?打开命令行工具(Windows用CMD或PowerShell,Mac可以用终端Terminal):

python --version

如果输出类似 Python 3.10.12,那就说明已经安装好了。如果没有,请先到 Python官网下载并安装。

2. 安装FastAPI

我们通过pip来安装FastAPI:

pip install fastapi

⚠️ 如果你看到提示缺少uvicorn或者无法启动服务,请继续安装Uvicorn,它是运行FastAPI程序需要的异步服务器。

pip install uvicorn

3. 检查是否安装成功

新建一个文本文件,把它保存为 main.py,然后写下下面这段代码:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello, FastAPI!"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="127.0.0.1", port=8000)

保存好后,在命令行中进入该文件所在目录,执行:

python main.py

看到类似以下内容就表示启动成功了:

INFO:     Uvicorn running on http://127.0.0.1:8000

现在打开浏览器,访问地址:http://127.0.0.1:8000,你会看到页面返回:

{
  "message": "Hello, FastAPI!"
}

太棒了!你的第一个FastAPI程序已经跑起来了 ✅


核心概念:理解最重要的几个概念

核心概念:理解最重要的几个概念

学习任何编程技术都要先掌握它的核心概念。下面几个术语可能会让你有点陌生,但别担心,我会用最直白的方式解释它们。


一、什么是API?

API 的全称是 Application Programming Interface,中文叫应用程序编程接口。

通俗点说,就是一个服务(通常是后台服务)对外暴露的一些操作,别的程序可以通过这些操作来调用服务的功能。

举个例子:就像银行柜台的窗口,你想取钱,要通过窗口而不是直接进金库。API就是这个窗口,别人想获取你系统的数据或操作某项功能,必须走这个“窗口”。

在FastAPI中,我们写的就是一个个这样的“窗口”。


二、什么是路由(Route)?

路由就是告诉FastAPI:当用户访问某个URL的时候,应该执行哪个函数。

例如:

@app.get("/users")
def list_users():
    return {"users": ["张三", "李四"]}

这段代码的意思就是:当你访问 /users 这个地址时,就会调用 list_users 函数,并返回一个包含两个用户的列表。

常见请求方法有:

  • @app.get():获取数据(相当于阅读一本书)
  • @app.post():提交数据(相当于填写表单)
  • @app.put():更新数据(相当于编辑内容)
  • @app.delete():删除数据

三、什么是路径参数?

路径参数是指 URL 中的一部分,用来传递额外的信息。

比如:

@app.get("/items/{item_id}")
def read_item(item_id: int):
    return {"item_id": item_id}

这时候你访问:http://127.0.0.1:8000/items/123

返回结果:

{
  "item_id": 123
}

FastAPI 会自动把 123 转换为你指定的类型,比如这里是 int 类型。


四、什么是查询参数?

查询参数是在URL末尾带问号传参的方式。

比如:

@app.get("/search")
def search(q: str = None, limit: int = 10):
    return {"query": q, "limit": limit}

访问地址:http://127.0.0.1:8000/search?q=fastapi&limit=5

返回结果:

{
  "query": "fastapi",
  "limit": 5
}

这在搜索功能中非常常见。


五、什么是请求体?

当我们要发送大量复杂的数据给服务器时(比如注册一个用户),就要用POST请求,并在请求体中带上数据。

示例:

from pydantic import BaseModel

class UserCreate(BaseModel):
    name: str
    email: str
    age: int

@app.post("/users/")
def create_user(user: UserCreate):
    return {"received_data": user}

我们可以使用 Postman、curl 或者浏览器自带的开发者工具测试这个接口:

发送JSON数据如下:

{
  "name": "王五",
  "email": "wangwu@example.com",
  "age": 25
}

FastAPI 会自动帮我们将 JSON 数据解析成 Python 对象。


六、什么是自动生成的文档?

FastAPI 最贴心的地方之一就是 自动生成API文档

只要你的程序还在运行状态,访问下面这两个链接:

你就可以看到你写的每一个接口,还能直接在网页上测试每个功能 🔥


实战项目:做一个简单的图书管理系统

实战项目:做一个简单的图书管理系统

学完理论之后,我们来动手做一个小小的实战项目——图书管理系统

目标功能包括:

  • 查看所有书籍
  • 添加一本新书
  • 根据ID查找某一本书
  • 修改书名
  • 删除某本书

第一步:定义图书模型

我们先创建一个Pydantic模型,用于描述每本书的基本信息:

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

app = FastAPI()

# 定义图书模型
class Book(BaseModel):
    id: int
    title: str
    author: str

# 模拟数据库存储
books_db = [
    Book(id=1, title="Python基础教程", author="张老师"),
    Book(id=2, title="深入理解计算机系统", author="李教授"),
]

第二步:列出所有图书

@app.get("/books/", response_model=List[Book])
def get_books():
    return books_db

访问 http://127.0.0.1:8000/books/ 即可看到结果。


第三步:根据ID查看某本书

@app.get("/books/{book_id}", response_model=Book)
def get_book(book_id: int):
    for book in books_db:
        if book.id == book_id:
            return book
    return {"error": "未找到该书籍"}

测试地址:http://127.0.0.1:8000/books/1


第四步:添加一本书

@app.post("/books/", response_model=Book)
def add_book(book: Book):
    books_db.append(book)
    return book

用Postman或curl发送POST请求测试:

{
  "id": 3,
  "title": "数据库原理",
  "author": "刘博士"
}

第五步:修改一本书的信息

@app.put("/books/{book_id}")
def update_book(book_id: int, updated_book: Book):
    for i, book in enumerate(books_db):
        if book.id == book_id:
            books_db[i] = updated_book
            return {"message": "书籍信息已更新"}
    return {"error": "未找到该书籍"}

第六步:删除一本书

@app.delete("/books/{book_id}")
def delete_book(book_id: int):
    for i, book in enumerate(books_db):
        if book.id == book_id:
            del books_db[i]
            return {"message": "删除成功"}
    return {"error": "未找到该书籍"}

现在,你的图书管理系统已经初具规模啦!👏


常见问题解答(FAQ)

作为一个刚入门的新手,你可能会遇到一些小问题。这里我整理了一些最常见的疑问,希望对你有帮助。


❓Q1:为什么我的代码运行不起来?

可能是以下几个原因:

  1. Python没安装正确:请确保你输入 python --version 后能看到版本号。
  2. 包没安装好:确认安装了 fastapiuvicorn
  3. 路径错误:执行命令前,要确保你在 .py 文件所在的目录下。
  4. 拼写错误:Python语法对大小写和缩进要求很严格,请仔细检查拼写和空格。

❓Q2:出现错误提示 TypeError: object of type 'Book' has no len() 怎么办?

这是因为FastAPI不能直接处理自定义对象列表作为响应。你可以改为将对象转换为字典形式再返回:

return [book.dict() for book in books_db]

或者在 @app.get() 中加上 response_model=List[Book] 参数,让它自动处理。


❓Q3:POST请求总是报错:“unprocessable entity”

这表示你发送的JSON格式不符合预期,请检查字段名称和类型是否与定义的 BaseModel 匹配。


❓Q4:怎么重启服务?

在命令行界面按住 Ctrl + C 即可终止当前运行的程序,然后再重新运行 python main.py


❓Q5:FastAPI支持MySQL吗?

当然支持,FastAPI本身只是接口层,连接数据库需要结合如SQLAlchemy、Tortoise-ORM等ORM工具进行操作。后续我们可以在学习建议部分提到这些扩展知识。


学习建议:下一步该学什么?

恭喜你完成FastAPI入门!接下来你可以沿着这几个方向继续深入:


✅ 1. 掌握更复杂的API设计

  • 使用分页、过滤、排序等高级功能
  • 处理文件上传和下载
  • 设计安全机制(如Token认证)

✅ 2. 集成数据库

  • 学习SQLAlchemy(同步ORM)
  • 学习Tortoise-ORM(异步ORM)
  • 实现真正的增删改查功能,替代之前用的模拟列表

✅ 3. 学习异步编程

FastAPI基于异步编程模型(async/await),所以掌握这一块有助于提升性能,尤其适合处理高并发场景。


✅ 4. 使用中间件优化性能

  • 记录请求日志
  • 设置跨域支持(CORS)
  • 缓存策略设置
  • 请求限流

✅ 5. 部署上线实战

学会如何把你写的FastAPI项目部署上线,常见的工具有:

  • Gunicorn + Uvicorn 部署
  • Nginx + Gunicorn反向代理
  • 使用Docker容器化打包
  • 上云部署(阿里云、腾讯云、Heroku、Render等)

结语:坚持练习才是进步的关键!

负载均衡配置-1

FastAPI是一门实践性很强的技术。刚开始看起来可能有些抽象,但只要你愿意敲代码、试错、修改,很快就能感受到编程的乐趣。

记住一句话:

“程序员不是天生的,而是练出来的。”

最后送大家一句鼓励的话:

别怕犯错,代码世界没有对错,只有成败;多练习、多提问,你也能写出属于自己的强大后端服务!

祝你学习顺利,早日成为独当一面的后端工程师!🌟


(总字数:约3498字)

评论 0

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