一文掌握异步web框架FastAPI(一)-- 基础、路由、请求体

目录

一、安装 FastAPI 和 Uvicorn(一个 ASGI 服务器):

1、ASGI 与 WSGI

2、Uvicorn 的特点

二、一个 简单的FastAPI 应用

​编辑

三、路由参数与请求体

1. 基础路由

2. 路径参数和查询参数

3、请求体

        1)JSON Data

        2)multipart/form-data,用于处理文件上传和表单数据的组合。

1、form-data:处理表单数据

2、Multi-part Data,处理文件上传

         3)Raw Data:处理纯文本数据

1、从查询参数中传参

2、从请求体中传参

4)Binary Data 格式(二进制)

5)多个请求体参数


FastAPI 是一个现代的、快速(高性能)的 web 框架,用于构建 API。它是 Python 生态中的一种新选择,其设计目的是易于使用,同时保持高性能。FastAPI 基于最新的 ASGI 标准来处理异步请求,因此它支持异步代码,这使得它在处理 I/O 阻塞操作时非常高效。

FastAPI 的主要特性包括:

  • 高性能:FastAPI 使用了 Starlette 和 Pydantic 来实现高性能。
  • 简洁的代码:FastAPI 鼓励简洁的编码风格。
  • 数据验证:FastAPI 自动从请求中获取数据,并验证它们是否符合预期的数据模型。
  • 自动文档生成:FastAPI 自动为API 创建交互式文档(使用 Swagger UI 或 ReDoc)。

一、安装 FastAPI 和 Uvicorn(一个 ASGI 服务器):

pip install fastapi uvicorn

科普一下:Uvicorn 是一个高性能的 ASGI (Asynchronous Server Gateway Interface) 服务器,用于部署异步 Python Web 框架和应用。它是基于 Python 的 asyncio 模块和标准库中的 http 服务器模块来实现的。

1、ASGI 与 WSGI

  • WSGI (Web Server Gateway Interface): 是一种 Python 标准,定义了 Web 服务器与 Python Web 应用之间的接口。传统的 Python Web 框架如 Flask 和 Django 使用的是 WSGI。
  • ASGI (Asynchronous Server Gateway Interface): 是 WSGI 的异步版本,设计用于支持异步代码。FastAPI、Quart 和 Sanic 等现代 Web 框架使用 ASGI。

2、Uvicorn 的特点

  1. 高性能: Uvicorn 利用了 asyncio 和 uvloop (一个快速的 asyncio 事件循环),可以处理大量并发连接,适合高流量网站。
  2. 异步支持: Uvicorn 支持异步代码,可以更好地利用硬件资源,减少阻塞等待的时间。
  3. 简单易用: Uvicorn 提供了一个简单的命令行工具来启动应用,同时也支持配置文件。

二、一个 简单的FastAPI 应用

模块:main.py

from fastapi import FastAPI

app = FastAPI()

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

通过命令行启动应用(切到main.py目录下):

uvicorn main:app --reload

或者在main脚本中直接启动uvicorn:

from fastapi import FastAPI

app = FastAPI()

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


# 运行服务器
if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="localhost", port=8000)

此时访问 http://localhost:8000(http://127.0.0.1:8000) 就可以看到返回的 JSON 对象。

三、路由参数与请求体

1. 基础路由

FastAPI 支持常见的 HTTP 方法,如 GET、POST、PUT、DELETE 等。


from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}


@app.post("/items/")
async def create_item(item: dict):
    return item


@app.put("/items/{item_id}")
async def update_item(item_id: int, item: dict):
    return {"item_id": item_id, **item}


@app.delete("/items/{item_id}")
async def delete_item(item_id: int):
    return {"item_id": item_id}

定义一个发送请求的脚本:


import requests
import json


def festapi_request(method, url, headers=None, params=None):
    if method == 'GET':
        response = requests.get(url, params=params, headers=headers)
    elif method == 'POST':
        response = requests.post(url, data=params, headers=headers)

    elif method == 'PUT':
        response = requests.put(url, data=params, headers=headers)

    elif method == 'DELETE':
        response = requests.delete(url, params=params, headers=headers)

    else:
        raise ValueError('只支持GET、POST、PUT、DELETE请求')

    print(f'{method}, resp: {response.json()}')
    return response.json()


if __name__ == '__main__':

    get_resp = festapi_request('GET', 'http://127.0.0.1:8000/items/1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值