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

 ↓推荐关注↓

一、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
2、安装环境
a1912881253cb8f235e250e74acee083.png
3、安装fastapi
83945a727ea6fe4a3d3d51cc397f9b8c.png

三、教程

1.开启服务和接口访问

main.py

import uvicorn
from fastapi import FastAPI
app=FastAPI()
if __name__ == '__main__':
    uvicorn.run(app)
5c658c371bb61c3a71429b81b945efea.png

服务器运行

9a3b8b17485b240ccfe7a8cfa977f26a.png 8fed9c22a9cf51cca6d5f873a16c9e8e.png

添加接口

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)

重新运行项目
1b401708778c1e86a2d56c35c03d438b.png

5e94932e05aece734d71c55f3765720f.png

2.json数据

b18c8db0383b62c9b2428c69abccaa7a.png

重新项目

aee8aaa4f371a671a483cb14ff289333.png

json数据格式解析

https://www.json.cn/
4e78fe30e13046c4820ce25fa0aa863d.png

3.api文档在线生成

49e401a8dc5a140b17221d9c1d94e3a5.png
文档解析
5fdd7fccd6aac0aa8166972b5c0cc229.png
文档备注信息
62b99a95d073374c588d3dd1059dbc4f.png

e4fe11a8f2ebff3c9e7607d7ac40da88.png

4.发送请求

POST请求
c72ddb985204da4528b5012df307472d.png

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

cb30bdb4a51cdfc4d171f026d3bb47e4.png 45d006dcc82b26ffeb09e6e549e39408.png

定义多种请求格式

fdc8c1d2d2240987d81113cee20ae234.png

5.获取URL参数

8f714591e631bf7b2dbdb149fcc43855.png
d024b3f7ed95355d8334e91f216ed76e.png

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 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

2146c757d9b4c9d6986ef650223bf85d.png
58e25dcf016a3a513e233d41481f71d8.png

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

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)

f1548f10df22b552f0272dc5f2fbbfe3.png
060f0f30b8e0008ff082dd10b6dee06b.png

8.自定义返回HTML

7de56f99ed2c908dcd70f7366eae2be0.png
3950b537dabff623ff9d4aff073e62d6.png

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.自定义返回文件

e7e9d785b30e43c4e3694d88f3e12fbf.png54263890793d4b066493693873f09769.png

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页面

5835704889f01bc663fff500730d3e0a.png
8417166b3eacf8f41f14e924edff59bb.png
7cd072934faec00688f4f80a29c9b9ee.png

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)

返回结果

3282e5c727dac97487f4a375fe9a8149.png
b9a2c9183d6f7a40cf4361d6c3a3016d.png
5ad33eb6bef76c4adfbf6d4bb01d5108.png
3115100eea834fcf5e6d9b06ad291020.png

11.代办事项小案例

main.py

adf14081da5b4b6daccb28c85fc6bcf1.png

index.html

c26f791390c5e48ac71ab563a601f2ea.png

运行项目

78ca4fe3c1e95922b799a15f20772059.png

main.py

4ec7cfb37e72d0e98cba2fd7feddb6fd.png

index.html

02933481cfe87c15d4e2957bb5e5f061.png

运行项目

4336ef9e6148c98401179e0eccae1ce5.png

12.绑定数据库

安装 tortoise-orm

c1877b5e64b3b4a6fb2cc4642f815283.png

安装 aiomysql

efc852cb9babfe9eff9c12005714b5fe.png

main.py
a7c49394592db134f408225148934fbd.png

13.数据库访问

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

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)

运行项目
a87248864945f745ca9dbc079e0fe3b2.png

14.数据库写入

main.py

7928584cb596473d6e3ba3c44bde42ac.png

运行项目

ce6e08167d4fcc35bcca1ef861b75dee.png

数据库里就多了个字段

9033dfab39b3107894597984a4fbe038.png

此时就是显示有问题

21b6a0e0f2feeb1c9e1a8b60a350458b.png

index.html

c835120d57f8c8608c9a7aaa87d154ae.png8ed369297a6a808c187c9f93f33d7e9f.png

 
 
 
 
 
 
推荐阅读
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值