前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastAPI入门

FastAPI入门

作者头像
@小森
发布2024-07-25 15:19:52
540
发布2024-07-25 15:19:52
举报
文章被收录于专栏:xiaosen
FastAPI框架介绍

FastAPI是一个现代、快速的Python Web框架,用于快速构建API。它基于 Pydantic 和 Starlette,使得代码更加简洁且易于绶护。

关键特性:

快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。

高效编码:提高功能开发速度约 200% 至 300%。

更少 bug:减少约 40% 的人为(开发者)导致错误。 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。 简单:设计的易于使用和学习,阅读文档的时间更短。 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。 健壮:生产可用级别的代码。还有自动生成的交互式文档。 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。


  • Starlette 用于构建 Web 部件:Starlette 是一个轻量级的 ASGI 框架和工具包,特别适合用来构建高性能的 asyncio 服务.
  • Pydantic 用于数据的操作:python 中用于数据接口定义检查与设置管理的库。
ASGI服务(WSGI)

WSGI,Web服务器网关接口,是一种Web服务器网关接口,它是一个Web服务器(如Nginx)与Web应用(如Flask框架写的程序)通信的一种规范。当前运行在WSGI协议之上的Web框架有Bottle,Flask,Django

ASGI:异步网关协议接口 ,一个介于网络协议服务和Python应用之间的标准接口,能够处理多种通用的协议类型,包括HTTP,HTTP2和WebSocket。

WSGI和ASGI的区别

WSGI是基于HTTP协议模式的,不支持WebSocket,而ASGI的诞生则是为了解决Python常用的WSGI不支持当前Web开发中的一些新的协议标准。

FastAPI安装

安装Python虚拟环境

为什么要使用虚拟环境

  1. 隔离项目依赖:每个项目都可能依赖不同版本的库,可以安装项目所需特定版本的库。
  2. 易于复制和部署:当你需要将项目部署到另一台服务器上时,虚拟环境可以确保所有依赖都被正确安装。
  3. 提高安全性:虚拟环境可以帮助你管理安全更新。

虚拟环境的安装步骤:

代码语言:javascript
复制
python -m venv ml    # ml就是虚拟环境名称

激活虚拟环境(每次用的时候要先激活):

代码语言:javascript
复制
source ml/bin/activate
安装FastAPI

需要安装所有的可选依赖及对应功能,包括了 uvicorn,你可以将其用作运行代码的服务器。

代码语言:javascript
复制
​pip install fastapi[all] -i https://pypi.douban.com/simple/

FastAPI案例

创建一个main.py:

代码语言:javascript
复制
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def root():
    return 'hello'


@app.get("/hello/{name}")
def say_hello(name: str):
    return {"message": f"Hello {name}"}


if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="127.0.0.1", port=8000)

访问接口和文档:

访问文档:


请求路径指的是 URL 中从第一个 / 起的后半部分。所以,在一个这样的 URL 中:

代码语言:javascript
复制
http://example.com/demo
http://127.0.0.1/demo

那么,真正的请求路径(路由)是:/demo

在FastAPI中,路由的配置是通过: 装饰器 完成的。

在 HTTP 协议中,可以使用以下的其中几种请求方法 与每个路径进行通信。

通常使用:

  • POST:创建数据。
  • GET:读取数据。
  • PUT:更新数据。
  • DELETE:删除数据。
  • PATCH: 修改单一数据

配置请求方法:

  • @app.post()
  • @app.put()
  • @app.delete()
  • @app.get()

FastAPI中请求数据

url请求参数是通过url请求地址携带的:

代码语言:javascript
复制
https://www.liblib.art/modelinfo/689c717fbce24ec8940660c4dc53c626?from=feed

这些请求参数是键值对的集合,这些键值对位于 URL 的 之后,并以 & 符号分隔。

代码语言:javascript
复制
from fastapi import FastAPI

app = FastAPI()

fake_demo_db = [{"demo_name": "Foo"}, {"demo_name": "Bar"}, {"demo_name": "Baz"}]


@app.get("/demo/")
def read_demo(skip: int = 0, limit: int = 10):
    return fake_demo_db[skip : skip + limit]

URL请求参数不是路径的固定部分,因此它们可以是可选的,并且可以有默认值。

代码语言:javascript
复制
from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/demo/{demo_id}")
async def read_demo(demo__id: str, q: Union[str, None] = None, short: bool = False):
    demo = {"demo__id": demo__id}
    if q:
        item.update({"q": q})
    if not short:
        item.update(
            {"description": "This is an amazing item that has a long description"}
        )
    return demo

Query校验数据

QueryFastAPI专门用来装饰请求参数的类,也可以提供校验。

代码语言:javascript
复制
@app.get("/demo/")
async def read_demo(q: Union[str, None] = Query(default=None, description="参数q可以传入字符串或者不传")):
    query_demo = {"q": q}
    return query_demo

descriptionQuery中的一个字段,用来描述该参数;

字符串长度校验
代码语言:javascript
复制
@app.get("/demo2/")
async def read_demo(q: Union[str, None] = Query(default=None, max_length=50, min_length=3)):
    query_demo = {"q": q}
    return query_demo
数值大小校验

如果参数的类型是int,float就可以采用Query进行大小校验,或者范围校验。

代码语言:javascript
复制
@app.get("/demo/")
async def read_demo(id: int = Query(description="id参数必须是0到1000之间", gt=0, le=1000), q: str = Query(default=None)):
    results = {"item_id": id}
    if q:
        results.update({"q": q})
    return results

我们还可以使用 Query 去接收一组值。使用 List[str] 来接收一组值,里面的str可以根据需求随意调换。

代码语言:javascript
复制
from fastapi import FastAPI,Query
from typing import List, Union

app = FastAPI()


@app.get("/demo/")
async def read_demo(q: Union[List[str], None] = Query(default=None, description='q可以传入多个值')):
    query_demos = {"q": q}
    return query_demos


if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="127.0.0.1", port=8000)
  • 视图函数 read_demo 接受一个名为 q 的参数,该参数通过 Query 进行了注解。Query 是 FastAPI 提供的一个函数,用于处理查询字符串中的参数。
  • uvicorn.run(app, host="127.0.0.1", port=8000) 来运行 FastAPI 应用

结果返回一个 JSON 响应:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ASGI服务(WSGI)
  • FastAPI安装
    • 安装Python虚拟环境
      • 安装FastAPI
      • FastAPI案例
        • 访问接口和文档:
        • FastAPI中请求数据
          • Query校验数据
            • 字符串长度校验
            • 数值大小校验
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档