FastAPI 入门教程FastAPI 入门教程
首页
基础教程
实战项目
FastAPI官网
首页
基础教程
实战项目
FastAPI官网
  • 基础教程

    • 📚 基础教程
    • 第0章 - Python 快速入门
    • 第1章 - FastAPI 简介
    • 第2章 - 环境搭建
    • 第3章 - 第一个 API
    • 第4章 - 路径参数
    • 第5章 - 查询参数
    • 第6章 - 请求体
    • 第7章 - 响应模型
    • 第8章 - CRUD 操作
    • 第9章 - 数据库操作

第0章 - Python 快速入门

嗨,朋友!我是长安。

在正式开始 FastAPI 之前,我先帮你快速掌握一下必备的 Python 基础知识。这些都是我当年自学时总结出来的精华,不会讲那些用不到的东西。

🎯 学习目标

本章将快速带你掌握使用 FastAPI 开发接口所需的 Python 基础知识。

长安说

如果你已经熟悉 Python 基础,可以直接跳到 第1章 - FastAPI 简介。但如果你和当年的我一样是零基础,建议跟着我认真学完这一章!

1️⃣ 变量和数据类型

1.1 变量定义

Python 中定义变量非常简单,不需要声明类型:

# 字符串
name = "张三"
message = '你好,世界!'

# 数字
age = 25
price = 99.99

# 布尔值
is_active = True
is_deleted = False

# 空值
result = None

1.2 常用数据类型

# 1. 字符串 (str)
username = "admin"
email = "admin@example.com"

# 2. 整数 (int)
user_id = 1001
count = 100

# 3. 浮点数 (float)
price = 99.99
score = 85.5

# 4. 布尔值 (bool)
is_vip = True
is_banned = False

# 5. 列表 (list) - 可以存放多个值
users = ["张三", "李四", "王五"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", True, 3.14]  # 可以混合类型

# 6. 字典 (dict) - 键值对
user = {
    "id": 1,
    "name": "张三",
    "age": 25,
    "email": "zhangsan@example.com"
}

# 7. 元组 (tuple) - 不可修改的列表
point = (10, 20)
rgb = (255, 0, 0)

1.3 类型提示(重要!)

FastAPI 大量使用类型提示,这是 Python 3.6+ 的特性:

# 基本类型提示
name: str = "张三"
age: int = 25
price: float = 99.99
is_active: bool = True

# 列表类型提示
from typing import List
names: List[str] = ["张三", "李四"]
scores: List[int] = [85, 90, 95]

# 字典类型提示
from typing import Dict
user: Dict[str, any] = {"name": "张三", "age": 25}

# 可选类型(可以是 None)
from typing import Optional
nickname: Optional[str] = None  # 可以是字符串或 None

2️⃣ 字符串操作

# 字符串拼接
first_name = "张"
last_name = "三"
full_name = first_name + last_name  # "张三"

# 格式化字符串(推荐使用 f-string)
name = "张三"
age = 25
message = f"我叫{name},今年{age}岁"  # "我叫张三,今年25岁"

# 常用方法
text = "  Hello World  "
text.strip()        # "Hello World" - 去除两端空格
text.lower()        # "  hello world  " - 转小���
text.upper()        # "  HELLO WORLD  " - 转大写
text.replace("Hello", "Hi")  # "  Hi World  " - 替换

# 字符串分割
email = "admin@example.com"
parts = email.split("@")  # ["admin", "example.com"]

3️⃣ 列表操作

# 创建列表
fruits = ["苹果", "香蕉", "橙子"]

# 访问元素(索引从 0 开始)
first = fruits[0]   # "苹果"
last = fruits[-1]   # "橙子" - 负数表示从后往前

# 添加元素
fruits.append("葡萄")        # 在末尾添加
fruits.insert(1, "西瓜")     # 在指定位置插入

# 删除元素
fruits.remove("香蕉")        # 删除指定元素
last_item = fruits.pop()     # 删除并返回最后一个元素

# 列表长度
count = len(fruits)          # 获取列表长度

# 遍历列表
for fruit in fruits:
    print(fruit)

# 列表推导式(常用技巧)
numbers = [1, 2, 3, 4, 5]
doubled = [n * 2 for n in numbers]  # [2, 4, 6, 8, 10]

4️⃣ 字典操作

# 创建字典
user = {
    "id": 1,
    "name": "张三",
    "age": 25,
    "email": "zhangsan@example.com"
}

# 访问值
name = user["name"]              # "张三"
age = user.get("age")            # 25
phone = user.get("phone", "无")  # "无" - 如果键不存在返回默认值

# 修改值
user["age"] = 26

# 添加新键值对
user["phone"] = "13800138000"

# 删除键值对
del user["email"]

# 检查键是否存在
if "name" in user:
    print("用户名存在")

# 遍历字典
for key, value in user.items():
    print(f"{key}: {value}")

# 获取所有键和值
keys = user.keys()      # 所有键
values = user.values()  # 所有值

5️⃣ 条件判断

# if-elif-else
age = 18

if age < 18:
    print("未成年")
elif age < 60:
    print("成年人")
else:
    print("老年人")

# 比较运算符
# ==  等于
# !=  不等于
# >   大于
# <   小于
# >=  大于等于
# <=  小于等于

# 逻辑运算符
age = 25
is_vip = True

if age >= 18 and is_vip:      # and - 与
    print("成年VIP用户")

if age < 18 or is_vip:        # or - 或
    print("未成年或VIP用户")

if not is_vip:                # not - 非
    print("非VIP用户")

# 简写形式(三元表达式)
status = "成年" if age >= 18 else "未成年"

6️⃣ 循环

# for 循环 - 遍历序列
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
    print(fruit)

# 遍历数字范围
for i in range(5):        # 0, 1, 2, 3, 4
    print(i)

for i in range(1, 6):     # 1, 2, 3, 4, 5
    print(i)

for i in range(0, 10, 2): # 0, 2, 4, 6, 8 (步长为2)
    print(i)

# while 循环
count = 0
while count < 5:
    print(count)
    count += 1

# break 和 continue
for i in range(10):
    if i == 3:
        continue  # 跳过本次循环
    if i == 7:
        break     # 跳出循环
    print(i)

7️⃣ 函数定义

函数是 FastAPI 的核心,每个接口都是一个函数!

# 基本函数
def say_hello():
    print("你好!")

say_hello()  # 调用函数

# 带参数的函数
def greet(name):
    print(f"你好,{name}!")

greet("张三")  # 你好,张三!

# 带返回值的函数
def add(a, b):
    return a + b

result = add(3, 5)  # 8

# 带类型提示的函数(FastAPI 必备!)
def add_numbers(a: int, b: int) -> int:
    return a + b

# 带默认参数
def greet(name: str, greeting: str = "你好") -> str:
    return f"{greeting},{name}!"

greet("张三")           # "你好,张三!"
greet("张三", "早上好")  # "早上好,张三!"

# 多个返回值
def get_user_info():
    name = "张三"
    age = 25
    return name, age

name, age = get_user_info()

8️⃣ 类和对象

FastAPI 使用 Pydantic 模型来定义数据结构,需要了解类的基础:

# 定义类
class User:
    def __init__(self, name: str, age: int):
        self.name = name
        self.age = age
    
    def introduce(self):
        return f"我叫{self.name},今年{self.age}岁"

# 创建对象
user = User("张三", 25)
print(user.name)         # "张三"
print(user.introduce())  # "我叫张三,今年25岁"

# 继承
class VIPUser(User):
    def __init__(self, name: str, age: int, level: int):
        super().__init__(name, age)
        self.level = level
    
    def introduce(self):
        return f"我叫{self.name},今年{self.age}岁,VIP等级{self.level}"

vip = VIPUser("李四", 30, 5)
print(vip.introduce())

9️⃣ 导入模块

# 导入整个模块
import math
result = math.sqrt(16)  # 4.0

# 导入特定函数
from math import sqrt, pow
result = sqrt(16)  # 4.0

# 导入并重命名
import datetime as dt
now = dt.datetime.now()

# 从包中导入
from typing import List, Dict, Optional
from pydantic import BaseModel

# FastAPI 常用导入
from fastapi import FastAPI, HTTPException, status
from fastapi.responses import JSONResponse

🔟 异常处理

# try-except 基本用法
try:
    result = 10 / 0
except ZeroDivisionError:
    print("不能除以零!")

# 捕获多种异常
try:
    number = int("abc")
except ValueError:
    print("转换失败")
except Exception as e:
    print(f"发生错误:{e}")

# finally - 无论是否异常都会执行
try:
    file = open("data.txt")
    # 处理文件
except FileNotFoundError:
    print("文件不存在")
finally:
    print("清理资源")

# 主动抛出异常(FastAPI 中常用)
def get_user(user_id: int):
    if user_id < 0:
        raise ValueError("用户ID不能为负数")
    return {"id": user_id, "name": "张三"}

1️⃣1️⃣ 装饰器(重要!)

FastAPI 的路由就是用装饰器实现的:

# 装饰器基础
def my_decorator(func):
    def wrapper():
        print("函数执行前")
        func()
        print("函数执行后")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()
# 输出:
# 函数执行前
# Hello!
# 函数执行后

# FastAPI 中的装饰器用法
from fastapi import FastAPI

app = FastAPI()

@app.get("/")  # 这就是装饰器!
def read_root():
    return {"message": "Hello World"}

1️⃣2️⃣ 异步编程基础

FastAPI 支持异步,了解基础概念:

# 同步函数(普通函数)
def get_user():
    return {"name": "张三"}

# 异步函数(使用 async/await)
async def get_user_async():
    return {"name": "张三"}

# FastAPI 中两种都可以用
from fastapi import FastAPI

app = FastAPI()

# 同步接口
@app.get("/sync")
def sync_endpoint():
    return {"message": "同步接口"}

# 异步接口(处理 I/O 操作时更高效)
@app.get("/async")
async def async_endpoint():
    return {"message": "异步接口"}

1️⃣3️⃣ 列表/字典推导式

Python 的高效写法,FastAPI 开发中经常用到:

# 列表推导式
numbers = [1, 2, 3, 4, 5]
squared = [n ** 2 for n in numbers]  # [1, 4, 9, 16, 25]

# 带条件的列表推导式
even_numbers = [n for n in numbers if n % 2 == 0]  # [2, 4]

# 字典推导式
users = ["张三", "李四", "王五"]
user_dict = {i: name for i, name in enumerate(users)}
# {0: "张三", 1: "李四", 2: "王五"}

# 实际应用示例
students = [
    {"name": "张三", "score": 85},
    {"name": "李四", "score": 92},
    {"name": "王五", "score": 78}
]

# 提取所有分数大于80的学生名字
high_scorers = [s["name"] for s in students if s["score"] > 80]
# ["张三", "李四"]

1️⃣4️⃣ 常用内置函数

# len() - 获取长度
len([1, 2, 3])        # 3
len("hello")          # 5

# max() / min() - 最大值/最小值
max([1, 5, 3])        # 5
min([1, 5, 3])        # 1

# sum() - 求和
sum([1, 2, 3, 4])     # 10

# sorted() - 排序
sorted([3, 1, 4, 2])  # [1, 2, 3, 4]

# enumerate() - 带索引遍历
for index, value in enumerate(["a", "b", "c"]):
    print(f"{index}: {value}")
# 0: a
# 1: b
# 2: c

# zip() - 并行遍历
names = ["张三", "李四"]
ages = [25, 30]
for name, age in zip(names, ages):
    print(f"{name}: {age}岁")

# map() - 映射
numbers = [1, 2, 3]
doubled = list(map(lambda x: x * 2, numbers))  # [2, 4, 6]

# filter() - 过滤
numbers = [1, 2, 3, 4, 5]
even = list(filter(lambda x: x % 2 == 0, numbers))  # [2, 4]

1️⃣5️⃣ FastAPI 必备知识点总结

使用 FastAPI 开发接口,你需要重点掌握:

✅ 必须掌握

  1. 类型提示 - name: str, age: int, List[str], Optional[int]
  2. 函数定义 - 每个接口都是一个函数
  3. 字典操作 - JSON 数据就是字典
  4. 装饰器 - @app.get(), @app.post()
  5. 类和对象 - Pydantic 模型

⭐ 建议掌握

  1. 列表操作 - 处理数组数据
  2. 条件判断 - 业务逻辑
  3. 异常处理 - 错误处理
  4. 导入模块 - 使用各种库

💡 了解即可

  1. 异步编程 - 提升性能(可选)
  2. 推导式 - 简化代码(可选)

📝 实战练习

完成以下练习,巩固所学知识:

练习1:用户信息处理

# 定义一个函数,接收用户信息字典,返回格式化的字符串
def format_user_info(user: dict) -> str:
    # TODO: 实现这个函数
    # 输入:{"name": "张三", "age": 25, "email": "zhangsan@example.com"}
    # 输出:"姓名:张三,年龄:25岁,邮箱:zhangsan@example.com"
    pass
点击查看答案
def format_user_info(user: dict) -> str:
    return f"姓名:{user['name']},年龄:{user['age']}岁,邮箱:{user['email']}"

# 测试
user = {"name": "张三", "age": 25, "email": "zhangsan@example.com"}
print(format_user_info(user))

练习2:数据过滤

# 从学生列表中筛选出分数大于等于60分的学生
students = [
    {"name": "张三", "score": 85},
    {"name": "李四", "score": 45},
    {"name": "王五", "score": 92},
    {"name": "赵六", "score": 58}
]

# TODO: 使用列表推导式筛选及格的学生
passed_students = []
点击查看答案
passed_students = [s for s in students if s["score"] >= 60]
print(passed_students)
# [{"name": "张三", "score": 85}, {"name": "王五", "score": 92}]

练习3:定义用户类

# 定义一个 User 类,包含 name, age, email 属性
# 并实现一个 to_dict() 方法,返回字典格式的用户信息

class User:
    # TODO: 实现这个类
    pass
点击查看答案
class User:
    def __init__(self, name: str, age: int, email: str):
        self.name = name
        self.age = age
        self.email = email
    
    def to_dict(self) -> dict:
        return {
            "name": self.name,
            "age": self.age,
            "email": self.email
        }

# 测试
user = User("张三", 25, "zhangsan@example.com")
print(user.to_dict())

🎯 快速参考卡片

# 变量定义
name: str = "张三"
age: int = 25
scores: List[int] = [85, 90, 95]

# 字典操作
user = {"name": "张三", "age": 25}
name = user.get("name", "默认值")

# 列表操作
fruits = ["苹果", "香蕉"]
fruits.append("橙子")

# 函数定义
def add(a: int, b: int) -> int:
    return a + b

# 类定义
class User:
    def __init__(self, name: str):
        self.name = name

# 条件判断
if age >= 18:
    print("成年")
else:
    print("未成年")

# 循环
for item in items:
    print(item)

# 异常处理
try:
    result = risky_operation()
except Exception as e:
    print(f"错误:{e}")

# 导入
from typing import List, Optional
from fastapi import FastAPI

🚀 下一步

恭喜你!现在你已经掌握了使用 FastAPI 开发接口所需的 Python 基础知识。

说实话,我当年学到这些内容花了不少时间。如果你能看到这里,说明你已经迈出了非常关键的一步!

准备好开始学习 FastAPI 了吗?

👉 第1章 - FastAPI 简介

💡 学习资源

  • Python 官方教程(中文)
  • 廖雪峰 Python 教程
  • 菜鸟教程 Python3

长安的建议

不需要把所有 Python 知识都学完才开始 FastAPI! 边学 FastAPI 边补充 Python 知识是更高效的学习方式。这是我多年经验总结出来的,相信我!

最近更新: 2025/12/26 11:25
Contributors: 王长安
Prev
📚 基础教程
Next
第1章 - FastAPI 简介