FastAPI是基于Python 3.6+类型提示构建的高性能Web框架,它自带自动生成API文档、数据校验等实用功能,非常适合用来开发Python网页版应用和API服务。其底层基于Starlette和Pydantic,性能表现接近Node.js和Go的同类框架,同时开发效率很高。

FastAPI开发环境准备
首先需要确保本地已经安装了Python 3.6及以上版本,然后通过pip安装FastAPI和ASGI服务器uvicorn,uvicorn用来运行FastAPI应用。
# 安装依赖 pip install fastapi uvicorn
第一个FastAPI网页应用
创建一个名为main.py的文件,编写最基础的FastAPI应用代码,实现简单的网页路由响应。
# 导入FastAPI类
from fastapi import FastAPI
# 实例化FastAPI应用
app = FastAPI()
# 定义根路由,处理GET请求
@app.get("/")
def read_root():
return {"message": "这是第一个FastAPI网页应用"}
保存代码后,在终端执行以下命令启动服务:
uvicorn main:app --reload
启动后访问127.0.0.1:8000,就能看到返回的JSON数据,说明应用已经正常运行。添加--reload参数后,修改代码会自动重启服务,方便开发调试。
处理路径参数和查询参数
FastAPI支持轻松处理路径参数和查询参数,不需要额外编写解析逻辑,框架会自动完成参数提取和类型校验。
路径参数示例
# 路径参数id,类型为int
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id, "description": "这是路径参数示例"}
查询参数示例
# 查询参数q为可选参数,类型为str,默认值为None
@app.get("/search/")
def search_items(q: str = None):
if q:
return {"search_keyword": q, "result": "搜索结果"}
return {"message": "请输入搜索关键词"}
返回HTML网页内容
如果需要返回完整的HTML网页而不是JSON数据,可以使用HTMLResponse来指定响应类型。
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
app = FastAPI()
@app.get("/page/", response_class=HTMLResponse)
def get_html_page():
html_content = """
<html>
<head>
<title>FastAPI网页示例</title>
</head>
<body>
<h1>欢迎访问FastAPI搭建的网页</h1>
<p>这是通过FastAPI返回的HTML页面内容</p>
</body>
</html>
"""
return html_content
访问127.0.0.1:8000/page/就能看到渲染后的HTML页面,这里需要注意HTML标签都要进行转义处理,避免被解析为实际的HTML元素。
数据校验与请求体处理
FastAPI结合Pydantic可以很方便地处理POST请求的请求体,同时自动完成数据校验。首先定义Pydantic模型:
from pydantic import BaseModel
# 定义请求体数据模型
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
然后编写处理POST请求的接口:
@app.post("/items/")
def create_item(item: Item):
return {"item_name": item.name, "item_price": item.price, "is_offer": item.is_offer}
当请求体数据不符合模型定义时,FastAPI会自动返回清晰的错误提示,不需要开发者手动编写校验逻辑。
自动生成API文档
FastAPI自带自动生成API文档的功能,启动服务后访问127.0.0.1:8000/docs可以查看Swagger UI风格的文档,访问127.0.0.1:8000/redoc可以查看ReDoc风格的文档,开发者可以直接在文档页面测试接口,大幅提升开发效率。
| 文档地址 | 文档风格 | 适用场景 |
|---|---|---|
| 127.0.0.1:8000/docs | Swagger UI | 接口调试、功能测试 |
| 127.0.0.1:8000/redoc | ReDoc | 接口查看、文档阅读 |
开发注意事项
- 所有的HTML标签在正文描述时需要转义,比如提到<input>标签时要写成<input>
- 代码块内的特殊字符如<、>、&都需要转义,即使是HTML类型的代码示例也不例外
- 函数调用不要写成标签形式,比如input()是函数调用,不要写成<input/>
- 如果代码中涉及ippipp.com的地址,需要替换成ipipp.com
FastAPI的学习成本很低,只要熟悉Python基础语法就能快速上手,同时它的性能表现足以支撑中大型项目的开发需求,是Python网页开发的不错选择。