当前位置:   article > 正文

FastAPI 学习笔记

FastAPI 学习笔记

0. 引言

在 Python 这个充满活力的生态系统中,FastAPI 应运而生,它是一个现代的、快速的 Web 框架,专注于构建 RESTful API。

无论你是一名有经验的 Python 开发人员,还是一名刚接触后端开发的新手,FastAPI 都值得一试。凭借其基于 ASGI 的异步特性、自动交互式文档、数据模型验证等优秀功能,FastAPI 让构建和维护 API 变得前所未有的高效和愉悦。

在这篇博客中,我们将一步步探索 FastAPI 的精华。从安装到项目搭建,从数据模型定义到路由处理,从中间件应用到数据库集成,无一幸免。我们还将学习如何结合 FastAPI 生态系统中的其他精彩库,打造功能丰富、高性能的 API 应用。无论你是想构建一个小巧的 API 还是开发一个复杂的企业级系统,FastAPI 都是不可多得的利器。

就让我们拥抱令人兴奋的 FastAPI,开启一段 Python Web 开发的新篇章吧!

1. 快速开始

安装 FastAPI 库,

pip install fastapi
  • 1

也需要一个 ASGI 服务器,比如 Uvicorn 或 Hypercorn,用于生产环境。

pip install "uvicorn[standard]"
  • 1

创建一个 main.py 文件,

from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

如何想使用异步,

from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

运行,

uvicorn main:app --reload
  • 1

关于命令 uvicorn main:app --reload 的解释如下:
main: 指的是主 Python 文件 main.py(“模块”)。
app: 指的是在 main.py 内部通过 app = FastAPI() 创建的对象。
–reload: 代码变更后重启服务器,仅在开发时使用。

打开你的浏览器,访问 http://127.0.0.1:8000/items/5?q=somequery

你将看到以下 JSON 响应:

{"item_id": 5, "q": "somequery"}
  • 1

你已经创建了一个 API,它:

  • 接收发送到 路径 //items/{item_id} 的 HTTP 请求。
  • 这两个 路径 接受 GET 操作 (也称为 HTTP 方法)。
  • 路径 /items/{item_id} 有一个必须为 int 类型的 路径参数 item_id
  • 路径 /items/{item_id} 有一个可选的 str 类型的 查询参数 q

现在访问 http://127.0.0.1:8000/docs

你会看到自动生成的交互式API文档(由Swagger UI提供):

在这里插入图片描述

2. 升级示例代码

将文件 main.py 修改为接收来自 PUT 请求的请求体。

使用 Pydantic 以标准 Python 类型声明请求体。

from typing import Union

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    price: float
    is_offer: Union[bool, None] = None


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}


@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}
  • 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

服务器应该会自动重新加载(因为您在上面的 uvicorn 命令中添加了 --reload)。

现在访问 http://127.0.0.1:8000/docs。

  • 交互式API文档将会自动更新,包括新的请求体部分。

在这里插入图片描述

  • 单击"Try it out"按钮,它允许您填写参数并直接与API进行交互:

在这里插入图片描述

  • 然后点击"Execute"按钮,用户界面将与您的API进行通信,发送参数,获取结果并将其显示在屏幕上:

在这里插入图片描述

FastAPI Documentation: https://fastapi.tiangolo.com

FastAPI Source Code: https://github.com/tiangolo/fastapi

未完待续!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/244244
推荐阅读
相关标签
  

闽ICP备14008679号