当前位置:首页>python>API 接口开发也没那么难,Python FastAPI Web 框架教程来了!

API 接口开发也没那么难,Python FastAPI Web 框架教程来了!

  • 2026-10-11 06:59:15
API 接口开发也没那么难,Python FastAPI Web 框架教程来了!
关注+星标,每天学习Python新技能

来源:网络

一、FastApi

1.FastAPI 可以做什么

它由 Sebastian Ramirez 开发

  • 开发网站
  • 开发 web API
  • 做一个测试平台
  • 做一个持续集成工具
  • 生成文档

2.为什么要学习 FastAPI

  • FastAPI 的使用方法和设计参考了几十个 python 明星项目 博采众长 吸收各家精华
  • FastAPI 和 Flask 一样简约
  • FastAPI 非常新 并且基于 python3.6 的类型声明系统
  • 自动生成文档
  • 类型声明和数据检验
  • 内置身份认证
  • 性能强
  • 原生支持异步
  • 强大的依赖注入系统
  • GraphQL 和 WebSocket 支持

二、准备工作

1.编译器工具

Python、Pycharm

2.python安装教程

https://www.runoob.com/python/python-install.html

3.pycharm安装教程

runoob.com/w3cnote/pycharm-windows-install.html

4.安装虚拟环境

1、创建项目工程

2、安装环境

3、安装fastapi

三、教程

1.开启服务和接口访问

main.py

import uvicornfrom fastapi import FastAPIapp=FastAPI()if __name__ == '__main__':    uvicorn.run(app)

服务器运行

添加接口

main

import uvicornfrom fastapi import FastAPIapp=FastAPI()# 添加首页@app.get("/")defindex():return"This is Home Page."if __name__ == '__main__':    uvicorn.run(app)

重新运行项目

2.json数据

重新项目

json数据格式解析

https://www.json.cn/

3.api文档在线生成

文档解析文档备注信息

4.发送请求

POST请求

使用ApiPost接口测试工具来访问接口

定义多种请求格式

5.获取URL参数

main.py

import uvicornfrom fastapi import FastAPIapp=FastAPI()@app.get("/user/{id}")defuser(id):return {"id":id}if __name__ == '__main__':    uvicorn.run(app)

6.获取请求头参数

main.py

import uvicornfrom fastapi import FastAPI,Headerapp=FastAPI()@app.get("/user")defuser(id, token=Header(None)):return {"id":id,"token":token}if __name__ == '__main__':    uvicorn.run(app)

7.表单获取数据

安装包

python-multipart

main.py

import uvicornfrom fastapi import FastAPI,Header,Formapp=FastAPI()@app.get("/user")defuser(id, token=Header(None)):return {"id":id,"token":token}@app.post("/login")deflogin(username=Form(None),password=Form(None)):return {"data":{"username":username,"password":password}}if __name__ == '__main__':    uvicorn.run(app)

8.自定义返回JSON信息

main.py

import uvicornfrom fastapi import FastAPIfrom fastapi.responses import JSONResponseapp=FastAPI()@app.get("/user")defuser():return JSONResponse(content={"msg":"get user"},                        status_code=202,                        headers={"a":"b"})if __name__ == '__main__':    uvicorn.run(app)

8.自定义返回HTML

main.py

import uvicornfrom fastapi import FastAPIfrom fastapi.responses import JSONResponse,HTMLResponseapp=FastAPI()@app.get("/user")defuser():return JSONResponse(content={"msg":"get user"},                        status_code=202,                        headers={"a":"b"})@app.get("/")defuser():    html_content="""    <html>        <body><p style="color:red">Hello World</p></body>        </html>    """return HTMLResponse(content=html_content)if __name__ == '__main__':    uvicorn.run(app)

9.自定义返回文件

main.py

import uvicornfrom fastapi import FastAPIfrom fastapi.responses import JSONResponse,HTMLResponsefrom starlette.responses import FileResponseapp=FastAPI()@app.get("/user")defuser():return JSONResponse(content={"msg":"get user"},                        status_code=202,                        headers={"a":"b"})@app.get("/")defuser():    html_content="""    <html>        <body><p style="color:red">Hello World</p></body>        </html>    """return HTMLResponse(content=html_content)@app.get("/avatar")defuser():    avatar='./static/violet.jpg'return FileResponse(avatar)if __name__ == '__main__':    uvicorn.run(app)

10.自定义返回HTML页面

main.py

import uvicornfrom fastapi import FastAPI,Requestfrom fastapi.templating import Jinja2Templatesapp=FastAPI()template=Jinja2Templates("pages")@app.get("/")defuser(req:Request):return template.TemplateResponse("index.html",context={"request":req})if __name__ == '__main__':    uvicorn.run(app)

返回结果

11.代办事项小案例

main.py

index.html

运行项目

main.py

index.html

运行项目

12.绑定数据库

安装 tortoise-orm

安装 aiomysql

main.py

13.数据库访问

models.py

from tortoise import Model,fieldsclassTodo(Model):    id=fields.IntField(pk=True)    content=fields.CharField(max_length=500)    create_at=fields.DatetimeField(auto_now_add=True)    updated_at=fields.DatetimeField(auto_now=True)

main.py

import uvicornfrom fastapi import FastAPI, Request, Formfrom fastapi.responses import RedirectResponsefrom starlette.templating import Jinja2Templatesfrom tortoise.contrib.fastapi import register_tortoisefrom dao.models import Todoapp=FastAPI()template=Jinja2Templates("pages")# 数据库绑定register_tortoise(app,db_url="mysql://root:123456@localhost:3306/fastapi",                  modules={"models":['dao.models']},                  add_exception_handlers=True,                  generate_schemas=True)todos = ["写日记", "看电影", "玩游戏"]# 添加首页@app.get("/")asyncdefuser(req:Request):    todos=await Todo.all()    print(todos)return template.TemplateResponse("index.html",context={"request":req,"todos":todos})@app.post("/todo")deftodo(todo=Form(None)):    todos.insert(0,todo)return RedirectResponse("/",status_code=302)if __name__ == '__main__':    uvicorn.run(app)

运行项目

14.数据库写入

main.py

运行项目

数据库里就多了个字段

此时就是显示有问题

index.html

长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等

▲扫描二维码-免费领取

推荐阅读

Python爬虫进阶:掌握Requests库的10个技巧

这5个Python库一旦掌握就离不开

让数据“动”起来:Python动态图表制作!

前端开发者的 Python 控制流:换一套语法,保留你的工程直觉

点击 阅读原文了解更多

最新文章

随机文章