• FastAPI 快速入门


    ?? FastAPI 快速入门

    文章目录


    ??前言

    提示:
    ??面向有一丢丢后端基础的
    ??文章为个人学习心得 如有冒犯 call me!
    ??快点做!!!!**


    一、??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
    
    • 1

    3.??pycharm安装教程

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

    4.??安装虚拟环境

    ??创建项目工程
    在这里插入图片描述
    ??安装环境
    在这里插入图片描述
    ??安装fastapi
    在这里插入图片描述

    三、???

    1.??开启服务和接口访问

    ??main.py

    import uvicorn
    from fastapi import FastAPI
    
    app=FastAPI()
    
    if __name__ == '__main__':
        uvicorn.run(app)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    ??服务器运行
    在这里插入图片描述
    ??----??----连----??----接----??----线----??
    在这里插入图片描述
    ??添加接口
    在这里插入图片描述
    ??main

    import uvicorn
    from fastapi import FastAPI
    
    app=FastAPI()
    
    # 添加首页
    @app.get("/")
    def index():
        return "This is Home Page."
    
    if __name__ == '__main__':
        uvicorn.run(app)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ??重新运行项目
    在这里插入图片描述
    ??----??----连----??----接----??----线----??
    在这里插入图片描述

    2.??json数据

    在这里插入图片描述
    ??重新项目
    在这里插入图片描述
    ??json数据格式解析

    https://www.json.cn/
    
    • 1

    在这里插入图片描述

    3.??api文档在线生成

    在这里插入图片描述
    ??文档解析
    在这里插入图片描述
    ??文档备注信息
    在这里插入图片描述

    在这里插入图片描述

    4.??发送请求

    ??POST请求
    在这里插入图片描述
    ??使用ApiPost接口测试工具来访问接口
    在这里插入图片描述
    在这里插入图片描述
    ??定义多种请求格式
    在这里插入图片描述

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    6.??获取请求头参数

    在这里插入图片描述
    ??----??----连----??----接----??----线----??
    在这里插入图片描述
    ??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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    7.??表单获取数据

    ??安装包

    python-multipart
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    ??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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    8.??自定义返回JSON信息

    在这里插入图片描述
    ??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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述
    在这里插入图片描述

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

    Hello World

    """ return HTMLResponse(content=html_content) if __name__ == '__main__': uvicorn.run(app)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

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

    Hello World

    """ return HTMLResponse(content=html_content) @app.get("/avatar") def user(): avatar='./static/violet.jpg' return FileResponse(avatar) if __name__ == '__main__': uvicorn.run(app)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    ??返回结果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    11.??代办事项小案例

    ??main.py
    在这里插入图片描述
    ??index.html
    在这里插入图片描述
    ??运行项目
    在这里插入图片描述
    ??main.py
    在这里插入图片描述
    ??index.html
    在这里插入图片描述
    ??运行项目
    在这里插入图片描述

    12.??绑定数据库

    ??安装 tortoise-orm
    在这里插入图片描述
    ??安装 aiomysql
    在这里插入图片描述

    ??main.py
    在这里插入图片描述

    13.??数据库访问

    在这里插入图片描述
    ??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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    ??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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    ??运行项目
    在这里插入图片描述

    14.??数据库写入

    ??main.py
    在这里插入图片描述
    ??运行项目
    在这里插入图片描述
    ??数据库里就多了个字段
    在这里插入图片描述
    ??此时就是显示有问题
    在这里插入图片描述
    ??index.html
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    操作系统学习笔记--进程与线程
    Redis 读写分离和哨兵机制
    案例分享 | 纽扣电池石墨片厚度及缺陷检测
    LeetCode算法心得——爬楼梯(记忆化搜索)
    【ARC机制下的循环引用 Objective-C语言】
    【ARM Coresight 系列文章 9.1 -- ITM 仪器化跟踪宏单元详细介绍】
    RK3288 Android11 RTL8723DS WiFi 和 蓝牙Bluetooth 适配
    C之(10)CMocka-单元测试框架使用
    什么是指针的指针和指向函数的指针?
    【Redis入门笔记 01】redis 安装 & 配置
  • 原文地址:https://blog.csdn.net/m0_67403240/article/details/126012753