来源:网络
一、FastApi
1.FastAPI 可以做什么
它由 Sebastian Ramirez 开发
2.为什么要学习 FastAPI
- FastAPI 的使用方法和设计参考了几十个 python 明星项目 博采众长 吸收各家精华
- FastAPI 非常新 并且基于 python3.6 的类型声明系统
二、准备工作
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 控制流:换一套语法,保留你的工程直觉