↓推荐关注↓
一、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、创建项目工程
![fd515bf445c98da178f8cba08396bd58.png](https://img-blog.csdnimg.cn/img_convert/fd515bf445c98da178f8cba08396bd58.png)
2、安装环境
![a1912881253cb8f235e250e74acee083.png](https://img-blog.csdnimg.cn/img_convert/a1912881253cb8f235e250e74acee083.png)
3、安装fastapi
![83945a727ea6fe4a3d3d51cc397f9b8c.png](https://img-blog.csdnimg.cn/img_convert/83945a727ea6fe4a3d3d51cc397f9b8c.png)
三、教程
1.开启服务和接口访问
main.py
import uvicorn
from fastapi import FastAPI
app=FastAPI()
if __name__ == '__main__':
uvicorn.run(app)
![5c658c371bb61c3a71429b81b945efea.png](https://img-blog.csdnimg.cn/img_convert/5c658c371bb61c3a71429b81b945efea.png)
服务器运行
![9a3b8b17485b240ccfe7a8cfa977f26a.png](https://img-blog.csdnimg.cn/img_convert/9a3b8b17485b240ccfe7a8cfa977f26a.png)
![8fed9c22a9cf51cca6d5f873a16c9e8e.png](https://img-blog.csdnimg.cn/img_convert/8fed9c22a9cf51cca6d5f873a16c9e8e.png)
添加接口
![93b943e67e17cc45e0689b3a0ab688af.png](https://img-blog.csdnimg.cn/img_convert/93b943e67e17cc45e0689b3a0ab688af.png)
main
import uvicorn
from fastapi import FastAPI
app=FastAPI()
# 添加首页
@app.get("/")
def index():
return "This is Home Page."
if __name__ == '__main__':
uvicorn.run(app)
重新运行项目
![5e94932e05aece734d71c55f3765720f.png](https://img-blog.csdnimg.cn/img_convert/5e94932e05aece734d71c55f3765720f.png)
2.json数据
![b18c8db0383b62c9b2428c69abccaa7a.png](https://img-blog.csdnimg.cn/img_convert/b18c8db0383b62c9b2428c69abccaa7a.png)
重新项目
![aee8aaa4f371a671a483cb14ff289333.png](https://img-blog.csdnimg.cn/img_convert/aee8aaa4f371a671a483cb14ff289333.png)
json数据格式解析
https://www.json.cn/
![4e78fe30e13046c4820ce25fa0aa863d.png](https://img-blog.csdnimg.cn/img_convert/4e78fe30e13046c4820ce25fa0aa863d.png)
3.api文档在线生成
文档解析
文档备注信息
![e4fe11a8f2ebff3c9e7607d7ac40da88.png](https://img-blog.csdnimg.cn/img_convert/e4fe11a8f2ebff3c9e7607d7ac40da88.png)
4.发送请求
POST请求
使用ApiPost接口测试工具来访问接口
![cb30bdb4a51cdfc4d171f026d3bb47e4.png](https://img-blog.csdnimg.cn/img_convert/cb30bdb4a51cdfc4d171f026d3bb47e4.png)
![45d006dcc82b26ffeb09e6e549e39408.png](https://img-blog.csdnimg.cn/img_convert/45d006dcc82b26ffeb09e6e549e39408.png)
定义多种请求格式
![fdc8c1d2d2240987d81113cee20ae234.png](https://img-blog.csdnimg.cn/img_convert/fdc8c1d2d2240987d81113cee20ae234.png)
5.获取URL参数
main.py
import uvicorn
from fastapi import FastAPI
app=FastAPI()
@app.get("/user/{id}")
def user(id):
return {"id":id}
if __name__ == '__main__':
uvicorn.run(app)
6.获取请求头参数
![3b6c6c3be1c2fed3ef9689644f98173d.png](https://img-blog.csdnimg.cn/img_convert/3b6c6c3be1c2fed3ef9689644f98173d.png)
![2e455bc01088815253e7abb856ba2e42.png](https://img-blog.csdnimg.cn/img_convert/2e455bc01088815253e7abb856ba2e42.png)
main.py
import uvicorn
from fastapi import FastAPI,Header
app=FastAPI()
@app.get("/user")
def user(id, token=Header(None)):
return {"id":id,"token":token}
if __name__ == '__main__':
uvicorn.run(app)
7.表单获取数据
安装包
python-multipart
main.py
import uvicorn
from fastapi import FastAPI,Header,Form
app=FastAPI()
@app.get("/user")
def user(id, token=Header(None)):
return {"id":id,"token":token}
@app.post("/login")
def login(username=Form(None),password=Form(None)):
return {"data":{"username":username,"password":password}}
if __name__ == '__main__':
uvicorn.run(app)
8.自定义返回JSON信息
![b187f59f1c515dbe30da75a78b224654.png](https://img-blog.csdnimg.cn/img_convert/b187f59f1c515dbe30da75a78b224654.png)
main.py
import uvicorn
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app=FastAPI()
@app.get("/user")
def user():
return JSONResponse(content={"msg":"get user"},
status_code=202,
headers={"a":"b"})
if __name__ == '__main__':
uvicorn.run(app)
8.自定义返回HTML
main.py
import uvicorn
from fastapi import FastAPI
from fastapi.responses import JSONResponse,HTMLResponse
app=FastAPI()
@app.get("/user")
def user():
return JSONResponse(content={"msg":"get user"},
status_code=202,
headers={"a":"b"})
@app.get("/")
def user():
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 uvicorn
from fastapi import FastAPI
from fastapi.responses import JSONResponse,HTMLResponse
from starlette.responses import FileResponse
app=FastAPI()
@app.get("/user")
def user():
return JSONResponse(content={"msg":"get user"},
status_code=202,
headers={"a":"b"})
@app.get("/")
def user():
html_content="""
<html>
<body><p style="color:red">Hello World</p></body>
</html>
"""
return HTMLResponse(content=html_content)
@app.get("/avatar")
def user():
avatar='./static/violet.jpg'
return FileResponse(avatar)
if __name__ == '__main__':
uvicorn.run(app)
10.自定义返回HTML页面
main.py
import uvicorn
from fastapi import FastAPI,Request
from fastapi.templating import Jinja2Templates
app=FastAPI()
template=Jinja2Templates("pages")
@app.get("/")
def user(req:Request):
return template.TemplateResponse("index.html",context={"request":req})
if __name__ == '__main__':
uvicorn.run(app)
返回结果
11.代办事项小案例
main.py
![adf14081da5b4b6daccb28c85fc6bcf1.png](https://img-blog.csdnimg.cn/img_convert/adf14081da5b4b6daccb28c85fc6bcf1.png)
index.html
![c26f791390c5e48ac71ab563a601f2ea.png](https://img-blog.csdnimg.cn/img_convert/c26f791390c5e48ac71ab563a601f2ea.png)
运行项目
![78ca4fe3c1e95922b799a15f20772059.png](https://img-blog.csdnimg.cn/img_convert/78ca4fe3c1e95922b799a15f20772059.png)
main.py
![4ec7cfb37e72d0e98cba2fd7feddb6fd.png](https://img-blog.csdnimg.cn/img_convert/4ec7cfb37e72d0e98cba2fd7feddb6fd.png)
index.html
![02933481cfe87c15d4e2957bb5e5f061.png](https://img-blog.csdnimg.cn/img_convert/02933481cfe87c15d4e2957bb5e5f061.png)
运行项目
![4336ef9e6148c98401179e0eccae1ce5.png](https://img-blog.csdnimg.cn/img_convert/4336ef9e6148c98401179e0eccae1ce5.png)
12.绑定数据库
安装 tortoise-orm
![c1877b5e64b3b4a6fb2cc4642f815283.png](https://img-blog.csdnimg.cn/img_convert/c1877b5e64b3b4a6fb2cc4642f815283.png)
安装 aiomysql
![efc852cb9babfe9eff9c12005714b5fe.png](https://img-blog.csdnimg.cn/img_convert/efc852cb9babfe9eff9c12005714b5fe.png)
main.py
13.数据库访问
![4ce82e6987807016578ee4eb4c77357f.png](https://img-blog.csdnimg.cn/img_convert/4ce82e6987807016578ee4eb4c77357f.png)
models.py
from tortoise import Model,fields
class Todo(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)
![b8da4c7530bc9d6cece6936f3efe2a4b.png](https://img-blog.csdnimg.cn/img_convert/b8da4c7530bc9d6cece6936f3efe2a4b.png)
main.py
import uvicorn
from fastapi import FastAPI, Request, Form
from fastapi.responses import RedirectResponse
from starlette.templating import Jinja2Templates
from tortoise.contrib.fastapi import register_tortoise
from dao.models import Todo
app=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("/")
async def user(req:Request):
todos=await Todo.all()
print(todos)
return template.TemplateResponse("index.html",context={"request":req,"todos":todos})
@app.post("/todo")
def todo(todo=Form(None)):
todos.insert(0,todo)
return RedirectResponse("/",status_code=302)
if __name__ == '__main__':
uvicorn.run(app)
运行项目
14.数据库写入
main.py
![7928584cb596473d6e3ba3c44bde42ac.png](https://img-blog.csdnimg.cn/img_convert/7928584cb596473d6e3ba3c44bde42ac.png)
运行项目
![ce6e08167d4fcc35bcca1ef861b75dee.png](https://img-blog.csdnimg.cn/img_convert/ce6e08167d4fcc35bcca1ef861b75dee.png)
数据库里就多了个字段
![9033dfab39b3107894597984a4fbe038.png](https://img-blog.csdnimg.cn/img_convert/9033dfab39b3107894597984a4fbe038.png)
此时就是显示有问题
![21b6a0e0f2feeb1c9e1a8b60a350458b.png](https://img-blog.csdnimg.cn/img_convert/21b6a0e0f2feeb1c9e1a8b60a350458b.png)
index.html
推荐阅读