创建一个基本的FastAPI项目并使用uvicorn
启动非常简单。以下是一个从零开始的详尽步骤指南:
1. 安装必要的依赖
确保你已经安装了Python 3.7+。然后通过pip
安装FastAPI和uvicorn
。
# 创建虚拟环境(可选,但推荐)
python -m venv venv
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows
# 安装FastAPI和uvicorn
pip install fastapi uvicorn
2. 创建项目文件结构
创建一个项目文件夹(例如my_fastapi_project
),目录结构如下:
my_fastapi_project/
├── main.py # 主入口文件
main.py
文件是FastAPI应用的核心,稍后我们将编写代码到这里。
3. 编写FastAPI应用代码
在main.py
中,添加以下代码:
from fastapi import FastAPI
# 创建一个FastAPI实例
app = FastAPI()
# 创建一个简单的路由,处理根路径 GET 请求
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI!"}
# 创建一个带参数的路由
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
这段代码:
-
创建了一个FastAPI实例。
-
定义了两个路由:
/
根路由,返回一个简单的JSON响应。/items/{item_id}
路由,支持路径参数item_id
和查询参数q
。
4. 启动应用
使用uvicorn
启动应用:
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
解释:
- main:app:第一个 main 是文件名(main.py),第二个 app 是 FastAPI 应用实例(Python 变量)
- --host:指定监听的地址,0.0.0.0 允许从外部访问。
- --port:指定端口号,默认为 8000。
- --reload:启用代码热重载,开发时使用,可以在改动代码时自动重启服务器。
5. 测试API
当应用启动后,你会看到类似的输出:
PS E:\osm\pytest> python -m venv venv
PS E:\osm\pytest> venv\scripts\activate
(venv) PS E:\osm\pytest> pip install fastapi uvicorn
Collecting fastapi
Downloading fastapi-0.115.8-py3-none-any.whl.metadata (27 kB)
Collecting uvicorn
Downloading uvicorn-0.34.0-py3-none-any.whl.metadata (6.5 kB)
Collecting starlette<0.46.0,>=0.40.0 (from fastapi)
Downloading starlette-0.45.3-py3-none-any.whl.metadata (6.3 kB)
Collecting pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4 (from fastapi)
Downloading pydantic-2.10.6-py3-none-any.whl.metadata (30 kB)
Collecting typing-extensions>=4.8.0 (from fastapi)
Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)
Collecting click>=7.0 (from uvicorn)
Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)
Collecting h11>=0.8 (from uvicorn)
Downloading h11-0.14.0-py3-none-any.whl.metadata (8.2 kB)
Collecting colorama (from click>=7.0->uvicorn)
Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)
Collecting annotated-types>=0.6.0 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi)
Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)
Collecting pydantic-core==2.27.2 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi)
Downloading pydantic_core-2.27.2-cp313-cp313-win_amd64.whl.metadata (6.7 kB)
Collecting anyio<5,>=3.6.2 (from starlette<0.46.0,>=0.40.0->fastapi)
Downloading anyio-4.8.0-py3-none-any.whl.metadata (4.6 kB)
Collecting idna>=2.8 (from anyio<5,>=3.6.2->starlette<0.46.0,>=0.40.0->fastapi)
Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)
Collecting sniffio>=1.1 (from anyio<5,>=3.6.2->starlette<0.46.0,>=0.40.0->fastapi)
Downloading sniffio-1.3.1-py3-none-any.whl.metadata (3.9 kB)
Downloading fastapi-0.115.8-py3-none-any.whl (94 kB)
Downloading uvicorn-0.34.0-py3-none-any.whl (62 kB)
Downloading click-8.1.8-py3-none-any.whl (98 kB)
Downloading h11-0.14.0-py3-none-any.whl (58 kB)
Downloading pydantic-2.10.6-py3-none-any.whl (431 kB)
Downloading pydantic_core-2.27.2-cp313-cp313-win_amd64.whl (2.0 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 5.3 MB/s eta 0:00:00
Downloading starlette-0.45.3-py3-none-any.whl (71 kB)
Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)
Downloading anyio-4.8.0-py3-none-any.whl (96 kB)
Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Downloading idna-3.10-py3-none-any.whl (70 kB)
Downloading sniffio-1.3.1-py3-none-any.whl (10 kB)
Installing collected packages: typing-extensions, sniffio, idna, h11, colorama, annotated-types, pydantic-core, click, anyio, uvicorn, starlette, pydantic, fastapi
Successfully installed annotated-types-0.7.0 anyio-4.8.0 click-8.1.8 colorama-0.4.6 fastapi-0.115.8 h11-0.14.0 idna-3.10 pydantic-2.10.6 pydantic-core-2.27.2 sniffio-1.3.1 starlette-0.45.3 typing-extensions-4.12.2 uvicorn-0.34.0
[notice] A new release of pip is available: 24.3.1 -> 25.0.1
[notice] To update, run: python.exe -m pip install --upgrade pip
(venv) PS E:\osm\pytest> uvicorn main:app --host 0.0.0.0 --port 8000 --reload
INFO: Will watch for changes in these directories: ['E:\\osm\\pytest']
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO: Started reloader process [22348] using StatReload
INFO: Started server process [3264]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: 127.0.0.1:22588 - "GET / HTTP/1.1" 200 OK
INFO: 127.0.0.1:22716 - "GET /items/123?q=456 HTTP/1.1" 200 OK
INFO: 127.0.0.1:24622 - "GET /docs HTTP/1.1" 200 OK
打开浏览器访问 http://127.0.0.1:8000,你会看到:
{"message": "Hello, FastAPI!"}
访问 http://127.0.0.1:8000/docs,你可以查看由FastAPI自动生成的Swagger API文档。
6. 添加到requirements.txt
(可选)
如果你计划部署应用到其他环境,可以将依赖项记录到requirements.txt
中:
pip freeze > requirements.txt
下面是生成的内容
annotated-types==0.7.0
anyio==4.8.0
click==8.1.8
colorama==0.4.6
fastapi==0.115.8
h11==0.14.0
idna==3.10
pydantic==2.10.6
pydantic_core==2.27.2
sniffio==1.3.1
starlette==0.45.3
typing_extensions==4.12.2
uvicorn==0.34.0
7. 关闭虚拟环境(可选)
如果你使用了虚拟环境,在完成工作后可以退出:
deactivate
通过以上步骤,你已经成功创建并运行了一个基本的FastAPI项目!🎉
8. Python的内置模块
- 数据处理和系统相关
import os # 操作系统接口,文件和目录操作
import sys # 系统相关的参数和函数
import time # 时间相关功能
import datetime # 日期和时间处理
import random # 生成随机数
import json # JSON 数据处理
import csv # CSV 文件读写
- 数学和科学计算
import math # 数学运算
import statistics # 统计功能
import decimal # 十进制定点和浮点运算
- 数据结构和算法
import collections # 提供额外的数据结构(如 defaultdict, Counter)
import heapq # 堆队列算法
import array # 数组数据结构
import bisect # 数组二分查找算法
- 字符串和文本处理
import string # 字符串常量和模板
import re # 正则表达式
- 文件和目录处理
import pathlib # 面向对象的文件系统路径
import shutil # 高级文件操作
import tempfile # 临时文件和目录
- 并发和异步处理
import threading # 多线程
import multiprocessing # 多进程
import asyncio # 异步 IO
import concurrent.futures # 线程池和进程池
- 网络相关
import urllib # URL 处理
import http # HTTP 协议
import socket # 底层网络接口
import email # 电子邮件处理
- 数据压缩和归档
import zlib # 数据压缩
import gzip # gzip 压缩
import zipfile # ZIP 文件处理
import tarfile # TAR 文件处理
- 调试和性能
import logging # 日志记录
import unittest # 单元测试
import timeit # 代码计时
import pdb # 调试器
常用示例:
# 文件和目录操作
import os
print(os.getcwd()) # 获取当前工作目录
os.makedirs("new_dir", exist_ok=True) # 创建目录
# 日期时间处理
from datetime import datetime, timedelta
now = datetime.now()
tomorrow = now + timedelta(days=1)
# JSON 处理
import json
data = {"name": "张三", "age": 25}
json_str = json.dumps(data, ensure_ascii=False)
# 随机数生成
import random
print(random.randint(1, 100)) # 生成1-100之间的随机整数
# 正则表达式
import re
text = "我的电话是123-4567-8900"
phone = re.search(r'\d{3}-\d{4}-\d{4}', text)
# 文件路径处理
from pathlib import Path
p = Path('.')
for file in p.glob('*.py'): # 列出所有Python文件
print(file)
这些模块都是 Python 标准库的一部分,不需要额外安装。它们提供了丰富的功能,能够满足大多数基本的编程需求。根据具体的项目需求,你可以选择合适的模块来使用。
要查看某个模块的详细文档,可以使用:
help(模块名) # 例如:help(os)
或者访问 Python 官方文档:docs.python.org/zh-cn/3/lib…