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

♂邓刚
2025-06-30 06:34
阅读 541

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

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

你可能已经听说过像 Django 或 Flask 这样的 Python Web 框架,而今天我们来认识一个更现代、性能更高的框架 —— FastAPI

FastAPI 是一个现代的、快速(高性能)的 Web 框架,专为构建 API 服务而设计。它是基于 Python 3.6+ 的异步特性,并且使用了类型提示(Type Hints)来提升代码质量和开发效率。

FastAPI 的主要特点:

  • 🚀 高性能:接近 Node.js 和 Go 的性能。
  • 💡 自动生成交互式文档(Swagger UI 和 ReDoc)。
  • ✅ 强大的数据验证和错误处理机制。
  • 🧠 使用 Python 类型提示让代码更加清晰、易于维护。
  • 🔐 支持异步请求处理,适合处理高并发场景。
  • 🛠 简洁的 API 设计,上手快。

它非常适合用来构建:

  • RESTful API 接口
  • 后端微服务
  • 数据接口供前端调用
  • 微信小程序或 App 的后台服务

如果你正在学习 Python 并想快速进入后端开发领域,FastAPI 是一个非常理想的选择。


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

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

在开始编码之前,我们需要准备好开发环境。别担心,这一步其实很简单。

1. 安装 Python

确保你电脑上安装了 Python 3.7 或更高版本。

你可以通过终端(Mac/Linux)或命令行(Windows)输入以下命令检查是否安装成功:

python --version

如果显示类似 Python 3.10.4,就说明你已安装好 Python。

如果没有,请去官网下载安装包:https://www.python.org/


2. 创建虚拟环境

我们推荐使用虚拟环境来管理项目依赖,这样可以避免不同项目的库发生冲突。

打开终端(或 cmd),创建一个项目文件夹并进入:

mkdir fastapi_project
cd fastapi_project

然后创建虚拟环境:

python -m venv venv

激活虚拟环境:

  • Windows:
venv\Scripts\activate
  • Mac/Linux:
source venv/bin/activate

你激活后命令行前面会有 (venv) 的前缀,表示你现在处于一个独立的开发环境中。


3. 安装 FastAPI 和 Uvicorn

安装 FastAPI:

pip install fastapi

FastAPI 需要一个 ASGI 服务器来运行(类似于 Flask 中的 Flask 自带服务器)。我们这里选择的是 Uvicorn

pip install uvicorn

✅ 到这里为止,你的开发环境已经搭建完成了!


核心概念:通俗讲解 FastAPI 基本术语

核心概念:通俗讲解 FastAPI 基本术语

作为一个刚入门的同学,下面几个基础概念非常重要:

1. 路由(Route)

你可以把它理解为“网址”,比如你想访问一个页面,你会输入一个网址,如 /hello

在 FastAPI 中,我们要给不同的网址绑定不同的功能(函数),这就是路由的作用。

举个例子:

from fastapi import FastAPI

app = FastAPI()

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

这个代码的意思是:“当用户访问 /hello 地址时,执行 say_hello 函数”。


2. 请求方法(HTTP Methods)

常见的 HTTP 请求方法包括:

  • GET:获取数据,例如查看一篇文章。
  • POST:提交数据,例如提交注册表单。
  • PUT:更新数据,例如修改用户信息。
  • DELETE:删除数据。

FastAPI 通过装饰器来指定请求方法:

@app.get("/data")         # 获取数据
@app.post("/create")      # 提交新数据
@app.put("/update/1")     # 更新数据
@app.delete("/delete/1")  # 删除数据

3. 请求参数

你可以从 URL 或请求体中获取用户传来的参数。

示例1:路径参数 Path Parameters

URL 中包含变量部分,例如:

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

访问 /users/123 将得到 { "user_id": 123 }

示例2:查询参数 Query Parameters

这是 URL 上面 ?key=value 的格式:

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

访问 /search?q=hello&limit=5 会返回 { "query": "hello", "limit": 5 }

示例3:请求体 Body Parameters

用于 POST 请求,比如用户注册:

from pydantic import BaseModel

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

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

FastAPI 会自动解析并验证 JSON 数据是否符合模型结构。


4. Pydantic 模型

上面提到的 UserCreate 是一个 Pydantic 模型,它用于定义和校验数据结构。

它可以自动完成这些事情:

  • 校验传入的数据是否符合要求(比如必须有 username)
  • 转换数据类型(例如字符串转整数)
  • 返回清晰的错误信息

安装它只需要:

pip install pydantic

新手常问:FastAPI 和 Flask 区别大吗?

特性 Flask FastAPI
性能 较低(同步) 高(支持异步)
文档 手写或插件生成 自动生成 Swagger 和 Redoc
类型提示 不强制使用 强烈推荐使用
数据验证 手动处理或第三方 内建 Pydantic 支持

所以如果你追求高效、易用、现代化的后端开发体验,推荐直接使用 FastAPI。


实战项目:做一个简单的学生管理系统

实战项目:做一个简单的学生管理系统

我们通过实际项目来巩固所学知识。

功能需求

我们要实现以下几个功能:

  • 显示所有学生列表(GET)
  • 添加一个学生(POST)
  • 查看特定学生信息(GET + 路径参数)
  • 删除某个学生(DELETE)

步骤 1:创建主程序文件

在项目目录下新建一个文件 main.py,内容如下:

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

app = FastAPI()

# 学生数据模型
class StudentCreate(BaseModel):
    name: str
    age: int
    grade: Optional[int] = None

class Student(StudentCreate):
    id: int

# 临时内存数据库
students_db = []

# 获取全部学生
@app.get("/students", response_model=List[Student])
def get_students():
    return students_db

# 添加学生
@app.post("/students", response_model=Student)
def create_student(student: StudentCreate):
    new_id = len(students_db) + 1
    new_student = Student(id=new_id, **student.dict())
    students_db.append(new_student)
    return new_student

# 获取某个学生
@app.get("/students/{student_id}", response_model=Student)
def get_student(student_id: int):
    for student in students_db:
        if student.id == student_id:
            return student
    return {"error": "Student not found"}

# 删除学生
@app.delete("/students/{student_id}")
def delete_student(student_id: int):
    global students_db
    students_db = [s for s in students_db if s.id != student_id]
    return {"message": "Student deleted"}

步骤 2:启动服务

在终端运行:

uvicorn main:app --reload

这时你就能看到服务在本地启动了,默认监听地址是:http://127.0.0.1:8000


步骤 3:测试接口

点击打开浏览器,访问:

👉 http://127.0.0.1:8000/docs

你会看到一个漂亮的交互式接口文档界面(Swagger UI),你可以在这里:

  • 查看每个接口的描述和参数
  • 直接发送请求测试接口效果
  • 不需要 Postman 也可以调试 API!

小结一下做了些什么:

功能 对应 URL 请求方式
获取学生列表 /students GET
添加学生 /students POST
获取某个学生 /students/{student_id} GET
删除学生 /students/{student_id} DELETE

这是一个典型的 CRUD 应用示例(Create, Read, Update, Delete)。


常见问题解答(FAQ)

以下是新手容易遇到的问题,希望对你有所帮助:

负载均衡配置-2

Q1:为什么我的接口不能被访问?

  • 检查是否已经启动服务:uvicorn main:app --reload
  • 检查浏览器访问的地址是否正确:应该是 http://127.0.0.1:8000/xxx
  • 看看控制台有没有报错信息,尤其是路径拼写错误或者语法错误

Q2:出现 TypeError: unsupported operand type(s)

通常是因为你尝试将两个不同类型的数据进行运算,比如字符串和数字相加。

解决办法:

  • 检查你的函数中是否有返回值错误
  • 一般出现在使用 .dict() 或者构造返回字典的时候

Q3:我写的模型类是不是必须继承 BaseModel?

是的!所有的 Pydantic 模型都必须继承 BaseModel,否则无法进行自动类型检查和数据解析。


Q4:FastAPI 支持数据库连接吗?

目前我们使用的是内存中的列表作为“数据库”。真实项目中,你需要结合数据库比如 SQLite、PostgreSQL、MySQL 等。

FastAPI 自身并不绑定数据库,但可以轻松与 SQLAlchemy、Tortoise ORM、MongoEngine 等配合使用。


Q5:部署到生产环境要注意什么?

  • 不建议使用 Uvicorn 的 --reload 模式部署(因为那是开发模式)
  • 可以使用 Nginx + Uvicorn Gunicorn 来部署
  • 注意日志、异常处理、权限控制、安全性等问题

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

恭喜你完成了第一个 FastAPI 入门教程!接下来可以沿着以下几个方向深入学习:

✅ 推荐学习路线图:

  1. ✅ 深入学习 Pydantic 模型

    • 更复杂的数据结构
    • 数据验证规则编写
  2. ✅ 学习连接数据库

    • 推荐:SQLAlchemy 或 Tortoise ORM
    • 学习基本的增删改查操作
  3. ✅ 掌握中间件和依赖注入

    • 认证授权(JWT)
    • 日志记录、限流、缓存等高级功能
  4. ✅ 了解异步编程

    • 使用 async/await 提升并发能力
  5. ✅ 项目实战进阶

    • 构建博客系统、商城后端、社交平台等完整项目
    • 接入 Redis、消息队列(如 RabbitMQ)、定时任务等功能
  6. ✅ 项目部署上线

    • Docker 容器化打包
    • 使用 Gunicorn + Uvicorn 部署生产环境
    • 使用 Nginx 做反向代理和负载均衡

结语:坚持实践,不断进步!

缓存策略对比-1

FastAPI 是一个学习曲线平滑、功能强大的工具,非常适合想要快速进入后端开发的新手程序员。

记住一句话:

“学习编程最重要的不是看懂,而是动手写出属于你自己的代码。”

希望你在学习的路上越走越远,未来成为一名出色的开发者!


如果你喜欢这种风格的教程,欢迎继续关注后续课程,我会带来更多实用、有趣的内容!

评论 0

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