- Flask: 轻量级、灵活,像一个工具箱,你可以按需添加组件,非常适合中小型项目、快速原型开发和微服务。
- Django REST framework (DRF): 功能强大、全栈,内置了认证、权限、序列化、文档生成等大量功能,适合构建大型、复杂的 API 项目。
下面我将为你详细介绍这两种方法,并提供一个更简单的替代方案。

使用 Flask (推荐初学者)
Flask 非常适合入门,因为它核心简单,易于理解。
安装 Flask
你需要安装 Flask 库,打开你的终端或命令行工具,运行:
pip install Flask
创建一个简单的 "Hello, World!" WebService
创建一个名为 app.py 的文件,并输入以下代码:
# app.py
from flask import Flask
# 创建一个 Flask 应用实例
app = Flask(__name__)
# 使用 @app.route 装饰器来定义 URL 路由
# '/' 是根路径
@app.route('/')
def hello_world():
return 'Hello, World!'
# 运行这个 Flask 应用
# debug=True 可以在代码修改后自动重启服务器,并显示详细的错误信息
if __name__ == '__main__':
app.run(debug=True)
运行和测试
- 在终端中,导航到
app.py文件所在的目录。 - 运行脚本:
python app.py
- 你会看到类似下面的输出,表示服务器已经启动:
* Serving Flask app 'app' * Debug mode: on * Running on http://127.0.0.1:5000 Press CTRL+C to quit - 打开你的网页浏览器,访问
http://127.0.0.1:5000,你将看到 "Hello, World!"。
创建一个返回 JSON 数据的 API (WebService 的核心)
WebService 通常返回 JSON 格式的数据,下面我们创建一个提供用户信息的 API。

修改 app.py 文件:
# app.py
from flask import Flask, jsonify
app = Flask(__name__)
# 模拟一个数据库
users = [
{"id": 1, "name": "Alice", "email": "alice@example.com"},
{"id": 2, "name": "Bob", "email": "bob@example.com"},
{"id": 3, "name": "Charlie", "email": "charlie@example.com"}
]
# 获取所有用户
@app.route('/api/users', methods=['GET'])
def get_users():
# jsonify 函数将 Python 字典或列表转换为 JSON 响应
return jsonify(users)
# 根据 ID 获取单个用户
@app.route('/api/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
# 遍历用户列表,查找匹配 ID 的用户
user = next((u for u in users if u['id'] == user_id), None)
if user:
return jsonify(user)
else:
# 如果用户不存在,返回 404 错误
return jsonify({"error": "User not found"}), 404
if __name__ == '__main__':
app.run(debug=True)
测试新的 API:
- 确保服务器正在运行 (
python app.py)。 - 获取所有用户: 在浏览器或 API 客户端 (如 Postman) 中访问
http://127.0.0.1:5000/api/users。- 响应:
[{"email": "alice@example.com", "id": 1, "name": "Alice"}, ...]
- 响应:
- 获取单个用户: 访问
http://127.0.0.1:5000/api/users/2。- 响应:
{"email": "bob@example.com", "id": 2, "name": "Bob"}
- 响应:
- 获取不存在的用户: 访问
http://127.0.0.1:5000/api/users/99。- 响应:
{"error": "User not found"}(状态码为 404)
- 响应:
使用 Django REST framework (DRF)
如果你已经熟悉 Django 或者项目非常复杂,DRF 是一个更强大的选择。
安装 Django 和 DRF
pip install django pip install djangorestframework
创建项目和应用
# 创建一个名为 myapi 的 Django 项目 django-admin startproject myapi # 进入项目目录 cd myapi # 创建一个名为 users 的应用 python manage.py startapp users
配置 settings.py
打开 myapi/settings.py 文件,进行以下修改:

# myapi/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 添加 drf
'rest_framework',
# 添加我们的应用
'users',
]
创建数据模型、序列化器和视图
a. 定义模型 (users/models.py)
# users/models.py
from django.db import models
class User(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
def __str__(self):
return self.name
b. 创建数据库迁移
python manage.py makemigrations python manage.py migrate
c. 创建序列化器 (users/serializers.py)
这是一个新文件,用于将模型实例转换为 JSON。
# users/serializers.py
from rest_framework import serializers
from .models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'name', 'email']
d. 创建视图 (users/views.py)
DRF 提供了强大的 APIView 和 ViewSet,这里我们用 ModelViewSet 可以自动创建列表、详情、创建、更新、删除等 API。
# users/views.py
from rest_framework import viewsets
from .models import User
from .serializers import UserSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
自动提供 'list', 'create', 'retrieve', 'update', 'partial_update', 'destroy' 的动作。
"""
queryset = User.objects.all().order_by('-id')
serializer_class = UserSerializer
e. 配置 URL (myapi/urls.py)
# myapi/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
# 将 API 路由指向 users 应用的路由配置
path('api/', include('users.urls')),
]
f. 为应用创建 URL (users/urls.py)
这是一个新文件,使用 DefaultRouter 可以自动为我们的 UserViewSet 生成 URL。
# users/urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import UserViewSet
# 创建一个路由器并注册我们的 viewset
router = DefaultRouter()
router.register(r'users', UserViewSet)
# API URL 现在由路由器自动确定
urlpatterns = [
path('', include(router.urls)),
]
运行和测试
- 启动开发服务器:
python manage.py runserver
- 访问 API 端点:
- 获取所有用户:
http://127.0.0.1:8000/api/users/ - 创建用户: 向
http://127.0.0.1:8000/api/users/发送一个 POST 请求,Body 中包含 JSON:{"name": "David", "email": "david@example.com"} - 获取单个用户:
http://127.0.0.1:8000/api/users/1/ - 更新用户: 向
http://127.0.0.1:8000/api/users/1/发送 PUT 或 PATCH 请求。 - 删除用户: 向
http://127.0.0.1:8000/api/users/1/发送 DELETE 请求。
- 获取所有用户:
你还可以访问 http://127.0.0.1:8000/api/ 来查看 DRF 自动生成的 API 根目录。
使用 FastAPI (现代高性能方案)
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,它自动生成交互式 API 文档(Swagger UI),并且类型检查支持非常好。
安装 FastAPI 和 Uvicorn (ASGI 服务器)
pip install "fastapi[all]"
创建一个简单的 API
创建 main.py 文件:
# main.py
from fastapi import FastAPI
from pydantic import BaseModel
# 创建 FastAPI 应用实例
app = FastAPI()
# 定义一个数据模型,用于请求体验证
class User(BaseModel):
id: int
name: str
email: str
# 模拟数据库
fake_users_db = [
{"id": 1, "name": "Alice", "email": "alice@example.com"},
{"id": 2, "name": "Bob", "email": "bob@example.com"},
]
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/api/users/", response_model=list[User])
def read_users():
return fake_users_db
@app.get("/api/users/{user_id}", response_model=User)
def read_user(user_id: int):
user = next((u for u in fake_users_db if u["id"] == user_id), None)
if not user:
# FastAPI 会自动处理 404 错误
from fastapi import HTTPException
raise HTTPException(status_code=404, detail="User not found")
return user
@app.post("/api/users/", response_model=User)
def create_user(user: User):
fake_users_db.append(user.model_dump())
return user
运行和测试
- 在终端运行 Uvicorn 服务器:
uvicorn main:app --reload
- 访问
http://127.0.0.1:8000。 - 访问 交互式 API 文档:
http://127.0.0.1:8000/docs,你可以直接在这个页面上测试你的 API!
总结与选择
| 特性 | Flask | Django REST framework (DRF) | FastAPI |
|---|---|---|---|
| 易用性 | ⭐⭐⭐⭐⭐ (非常简单) | ⭐⭐⭐ (概念较多) | ⭐⭐⭐⭐ (直观,有类型提示) |
| 性能 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ (基于 ASGI,非常快) |
| 功能丰富度 | ⭐⭐ (需要自己组合) | ⭐⭐⭐⭐⭐ (开箱即用) | ⭐⭐⭐⭐ (现代,功能强大) |
| 自动文档 | 需要插件 (如 Flask-RESTx) | ⭐⭐⭐⭐⭐ (内置) | ⭐⭐⭐⭐⭐ (内置 Swagger UI) |
| 学习曲线 | 平缓 | 陡峭 | 较平缓 |
| 适用场景 | 小型项目、微服务、快速原型 | 大型项目、企业级应用 | 现代高性能 API、微服务 |
给你的建议:
- 如果你是初学者,或者只是想快速搭建一个简单的 API:从 Flask 开始,它足够简单且强大。
- 如果你正在构建一个大型、需要长期维护的企业级应用:选择 Django REST framework,它的生态系统和内置功能会让你事半功倍。
- 如果你追求极致的性能,喜欢现代的开发方式(如类型提示),并看重自动生成的文档:强烈推荐 FastAPI,它是目前非常热门的新选择。
