python之fastapi快速构建web应用程序

目录

一、安装及依赖

二、基本架构

三、使用FastAPI实现Web应用程序

四、请求参数和响应

五、总结


FastAPI是一个现代的、快速的Web框架,它能够帮助开发者快速构建高性能的Web应用程序。它基于Python 3.6及以上版本,采用异步框架:ASGI。本文将对FastAPI的基本架构和使用进行详细介绍,并通过一个示例应用程序来演示其功能。

一、安装及依赖


在开始快速构建Web应用程序之前,首先需要安装FastAPI和相关依赖。我们可以使用Python自带的pip包管理器来安装FastAPI。在命令行窗口中输入以下命令即可:

pip install fastapi
pip install uvicorn[standard]

其中,uvicorn是一个基于ASGI的Python Web Server Gateway Interface服务器,用于将我们的应用程序运行在本地开发环境中。

二、基本架构


FastAPI基于ASGI异步框架构建,这意味着我们可以使用异步Python来提供更高效的Web应用程序。FastAPI包含以下主要部分:

  1. 路由器:用于定义应用程序的路由和处理函数。
  2. 请求体和响应体:FastAPI自动将JSON请求体转换为Python对象,并将Python对象转换为JSON响应体。
  3. 中间件:用于在请求和响应之间添加额外的处理。
  4. 依赖项:在执行路由处理程序之前解析并注入依赖项。

三、使用FastAPI实现Web应用程序


为了演示FastAPI的使用方法,我们将使用它来构建一个简单的Web应用程序。我们的应用程序将提供以下API功能:

  1. 添加两个数字,返回和。
  2. 使用路径参数返回一个字符串。

下面是应用程序的基本代码(文件名:main.py):

from fastapi import FastAPI

app = FastAPI()

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

@app.get("/add/{num1}/{num2}")
async def addnumbers(num1: int, num2: int):
    return {"sum": num1 + num2}

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

这个代码块包含三个API端点,分别是:

  1. 根目录‘/’(即Http://localhost:8000/)返回一个简单的JSON响应。
  2. ‘/add/{num1}/{num2}’ 用于将路径参数num1和num2相加,并返回结果。
  3. ‘/items/{item_id}’ 接收一个路径参数item_id和一个查询参数q,返回JSON响应。

在上述代码中,@app是FastAPI的装饰器。例如,@app.get()然后为此特定HTTP方法和类提供URL路径,可以扩展这些路由来接收参数,并返回响应。不同路径的处理函数中的参数,例如num1, num2和item_id,在FastAPI中具有自动校验和转换的能力。

我们还需要通过以下命令在本地运行应用程序:uvicorn main:app --reload。其中main是我们的文件名,app是FastAPI应用程序对象的实例化。–reload则是让应用程序在代码更改时自动重新加载。

完成以上步骤,您可以访问http://localhost:8000/add/5/10页面来浏览您的Web应用程序。

FastAPI是一个现代化、高性能的Python Web框架,它能够帮助开发者快速构建Web应用程序。我们在本文中介绍了如何安装FastAPI及其依赖项,并演示了如何使用FastAPI构建一个简单的Web应用程序。由于FastAPI的性能优异,我们推荐开发者尝试使用FastAPI来开发其自己的Web应用程序。

四、请求参数和响应


FastAPI支持多种类型的请求参数和响应体,例如查询参数、路径参数、请求体和响应体。它会自动对请求参数类型进行校验,确保请求参数结构正确且类型正确。以下是一些实例:

1.查询参数
查询参数通常用于过滤查询结果,相当于在URL路径后添加?key1=value1&key2=value2。FastAPI可以直接将查询参数转换为Python对象,例如:

from fastapi import FastAPI

app = FastAPI()

@app.get("/items/")
async def read_items(q: str = None):
    """
    q:查询参数
    """

    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results

访问http://localhost:8000/items/?q=test可以在查询参数q中传递test字符串,并将其添加到JSON响应中。结果将如下所示:

{
    "items": [
        {
            "item_id": "Foo"
        },
        {
            "item_id": "Bar"
        }
    ],
    "q": "test"
}

2.路径参数
路径参数通常用于唯一地标识资源,例如路径/items/{item_id}。FastAPI会自动将路径参数转换为相应的Python类型,例如:

from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
    """
    item_id: 路径参数
    q: 查询参数
    """

    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    return results

访问http://localhost:8000/items/42可以将42作为路径参数item_id传递并将其添加到JSON响应中。结果将如下所示:

{
    "item_id": 42
}

3.请求体
请求体通常用于包含需要处理的数据,FastAPI支持各种类型的请求体,例如JSON,表单,多部分文件等。以下是JSON请求体的示例:

from fastapi import FastAPI
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = None

app = FastAPI()

@app.post("/items/")
async def create_item(item: Item):
    """
    item:请求体
    """
    return item

将以下JSON请求体添加到POST请求http://localhost:8000/items/:

{
    "name": "Foo",
    "price": 42.0
}

结果将如下所示:

{
    "name": "Foo",
    "price": 42.0,
    "is_offer": null
}

4.响应体
响应体可以是任何Python类型,但通常使用Pydantic模型。Pydantic模型是Python 3.6+的数据验证和序列化/反序列化库。以下是一个Pydantic模型的示例:

from fastapi import FastAPI
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = None

class ItemResponse(BaseModel):
    item_id: int
    item: Item

app = FastAPI()

@app.post("/items/", response_model=ItemResponse)
async def create_item(item: Item):
    return {"item_id": 1, "item": item}

在上面的示例中,我们使用response_model参数告诉FastAPI响应的模型是ItemResponse。此模型由两个属性组成:item_id和item。当我们将以下JSON请求体添加到POST请求http://localhost:8000/items/时:

{
    "name": "Foo",
    "price": 42.0
}

FastAPI返回以下JSON响应体:

{
    "item_id": 1,
    "item": {
        "name": "Foo",
        "price": 42.0,
        "is_offer": null
    }
}

五、总结


在本文中,我们介绍了FastAPI的基本架构和如何使用它构建一个简单的Web应用程序。我们了解了请求参数和响应体类型,FastAPI能够自动对请求参数类型进行校验,并将Python对象转换为JSON响应体。FastAPI还允许我们在路由处理程序之前解析并注入依赖项。

FastAPI是一个现代化,高性能的Python Web框架。它继承了Python的简单性和快速性,并新增了一些高效的功能,例如异步框架和Pydantic模型等。如果您想构建高效的Web应用程序,FastAPI是一个非常不错的选择。

你可能感兴趣的:(python,json,开发语言)