目前在学习Python,对于Python初学者来说,FastAPI是最适合入门的接口开发框架——语法简单、上手快,还能自动生成接口文档,不用额外写文档就能测试接口。本文将从零开始,带大家搭建一个简单的文章管理接口,全程极简,只保留核心功能,避开复杂概念。
一、核心准备
首先准备好Python环境(建议Python 3.8及以上,兼容性更好),然后安装3个核心依赖,复制命令直接在终端执行即可,不用纠结每个依赖的作用。
pip install fastapi uvicorn pydantic
简单说明(不用记,知道就行):
pydantic:用来校验数据(比如文章标题不能太长、内容不能为空)
二、项目结构
很多教程一上来就拆分多个文件,初学者容易乱。我们先从「单文件」入手,所有代码都写在一个main.py里,先跑通,再理解。
fastapi_article/ # 项目文件夹,随便起名字└── main.py # 核心文件,所有代码都在这里
三、完整代码(有注释)
打开main.py,复制下面的代码,每一行都加了详细注释,初学者跟着注释看,就能明白每个部分的作用,不用死记硬背。
# 1. 导入需要的工具(固定写法,直接复制)from fastapi import FastAPI, HTTPExceptionfrom pydantic import BaseModelfrom typing import Optional, Listfrom datetime import datetime# 2. 创建接口应用实例(相当于启动一个接口服务,固定写法)app = FastAPI( title="后台管理接口文档", # 接口文档的标题,随便起 version="1.0.0", # 版本号,随便写 docs_url="/docs" # 自动生成的接口文档地址,固定 /docs)# 3. 定义文章的数据格式(告诉接口,接收/返回的文章长什么样)# 初学者理解:这是一个模板,规定了文章必须有哪些内容classArticle(BaseModel):title: str= "默认标题" # 文章标题,字符串类型,默认值可选content: str # 文章内容,字符串类型,必填(没有默认值就是必填)author: str # 作者,字符串类型,必填 # 可选字段:可有可无,用Optional标注category: Optional[str] = None # 文章分类,可选status: Optional[str] = "草稿" # 文章状态,可选,默认是草稿# 4. 模拟数据库(初学者不用连接真实数据库,用列表临时存数据)# 相当于一个“记事本”,存我们创建的文章,程序关掉就没了fake_db: List[Article] = []# 用来自动生成文章ID(每创建一篇,ID+1)next_article_id = 1# 5. 编写第一个接口:创建文章(POST请求,用来新增数据)# @app.post("/articles") 表示:接口路径是 /articles,请求方式是POST@app.post("/articles", summary="创建文章", description="新增一篇文章,必填标题、内容、作者")async def create_article(article: Article): # 全局变量,用来修改next_article_id的值 global next_article_id # 给文章添加ID和创建时间(数据库会自动帮我们做,这里手动模拟) new_article = {"id": next_article_id,"title": article.title,"content": article.content,"author": article.author,"category": article.category,"status": article.status,"create_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 格式化时间,更易读 } # 把新文章存入“记事本”(模拟存入数据库) fake_db.append(new_article) # ID自增,下一篇文章ID+1 next_article_id += 1 # 返回创建好的文章(接口的响应结果)return new_article# 6. 编写第二个接口:获取所有文章(GET请求,用来查询数据)@app.get("/articles", summary="获取所有文章", description="查询所有已创建的文章,无需传参数")async def get_all_articles(): # 直接返回“记事本”里的所有文章return fake_db# 7. 编写第三个接口:获取单篇文章(GET请求,根据ID查询)@app.get("/articles/{article_id}", summary="获取单篇文章", description="根据文章ID,查询某一篇文章的详情")async def get_one_article(article_id: int): # 遍历“记事本”,找到ID匹配的文章for article in fake_db:if article["id"] == article_id:return article # 如果没找到,返回404错误(提示文章不存在) raise HTTPException(status_code=404, detail=f"文章ID {article_id} 不存在,检查ID是否正确")# 8. 编写第四个接口:删除文章(DELETE请求,用来删除数据)@app.delete("/articles/{article_id}", summary="删除文章", description="根据文章ID,删除某一篇文章")async def delete_article(article_id: int): global fake_db # 遍历“记事本”,找到ID匹配的文章并删除for idx, article in enumerate(fake_db):if article["id"] == article_id: fake_db.pop(idx)return {"message": f"文章ID {article_id} 已删除", "success": True} # 没找到,返回404错误 raise HTTPException(status_code=404, detail=f"文章ID {article_id} 不存在,无法删除")# 9. 运行项目(固定写法,直接复制)if __name__ == "__main__":import uvicorn # 启动服务器,host=0.0.0.0 允许本地访问,port=8000 是端口号 uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True) # reload=True 表示:修改代码后,服务器自动重启,不用手动关闭再启动
四、运行项目(3步搞定,超简单)
保存main.py文件,确保文件路径没有中文(比如不要放在“我的文档”里,放在桌面即可)。
打开终端(Windows按Win+R,输入cmd;Mac打开终端),进入项目文件夹(比如桌面的fastapi_article文件夹,输入命令:cd 桌面/fastapi_article)。
输入启动命令,按回车:python main.py(或者用:uvicorn main:app --reload,效果一样)。
启动成功的标志:终端显示“Uvicorn running on http://0.0.0.0:8000”,没有报错。
五、测试接口(不用写代码,可视化操作)
FastAPI最良心的地方:自动生成可视化接口文档,不用我们写任何代码,直接在浏览器里测试。
打开浏览器,输入地址:http://127.0.0.1:8000/docs,就能看到接口文档页面。
第一步:测试「创建文章」接口(POST /articles) 点击接口右边的「Try it out」→ 修改请求参数(title、content、author必填,其他可选)→ 点击「Execute」→ 下方会显示响应结果,就是我们创建的文章。
第二步:测试「获取所有文章」接口(GET /articles) 点击「Try it out」→ 直接「Execute」,就能看到所有创建的文章。
第三步:测试「获取单篇文章」接口(GET /articles/{article_id}) 点击「Try it out」→ 输入文章ID(比如1)→ 「Execute」,就能看到这篇文章的详情。
第四步:测试「删除文章」接口(DELETE /articles/{article_id}) 点击「Try it out」→ 输入文章ID → 「Execute」,提示删除成功,再去获取所有文章,就能看到文章已经消失。
六、初学者注意事项(避坑重点)
Python版本必须3.8及以上,否则可能报错(安装时注意查看版本)。
安装依赖时,确保终端没有报错(如果报错,先升级pip:pip install --upgrade pip)。
启动项目时,不要关闭终端(关闭终端,接口服务就停了)。
接口路径不要写错,比如获取单篇文章是 /articles/1,不是 /article/1(多了s,少了s都会报错)。
创建文章时,title、content、author是必填项,少填一个会报错(这是pydantic的校验功能)。
七、进阶
初学者先把上面的代码跑通、理解清楚,再逐步补充以下功能:
添加「更新文章」接口(PUT请求,修改已有的文章)。
连接真实数据库(比如MySQL),让文章数据永久保存(不是存在列表里)。
总结:对于初学者,不用纠结复杂的概念,先跑通代码,感受接口的作用,再慢慢理解每个部分的逻辑。上面的代码完全可以直接用于简单的文章管理场景,后续再根据需求扩展即可。
官网链接:https://fastapi.tiangolo.com/