【4.0】Fastapi简单使用

【一】Fastapi引入

【1】构建基础的fastapi项目

from fastapi import FastAPI
from typing import Optional
from pydantic import BaseModel

# 创建 fastapi 对象
app = FastAPI()


# 定义模型表
class CityInfo(BaseModel):
    # 省份
    province: str
    # 城市
    country: str
    # 是否被感染 , Optional[bool] 与 bool 的区别是 可以不传,默认为 null
    is_affected: Optional[bool] = None


# 定义路由 ---- 访问根路径返回指定内容
@app.get('/')
def hellow_world():
    return {'hello': "world"}


# city : 路径参数
# /city/{city}?name=dream : ?name=dream 查询参数
@app.get('/city/{city}')
def result(city: str, query_string: Optional[str] = None):
    '''

    :param city: 城市 -- 路径参数
    :param query_string: 请求参数 -- str 类型 默认可以为 None
    :return:
    '''
    return {'city': city, 'query_string': query_string}

【2】启动项目

  • 基本启动命令
uvicorn 文件名:app名
# 启动项目命令 :uvicorn 01hello_world:app
  • Debug启动
uvicorn 文件名:app名 --reload
# 带Debug模式启动命令 : uvicorn 01hello_world:app --reload
  • 注意所在的文件路径
(venv) PS E:\fastapiProjects\projects\part3> uvicorn 01hello_world:app --reload
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [23976] using statreload
INFO:     Started server process [18320]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

【3】访问项目

  • http://127.0.0.1:8000
    • 可以看到正是上面我们所写的返回值

image-20230929144822376

  • http://127.0.0.1:8000/city/city
    • 访问带参数的路径,我们可以看到其中的一个参数已经被接受到了

image-20230929145011646

  • http://127.0.0.1:8000/city/city?query_string=dream
    • 携带我们的路径参数,我们也可以看到参数传递成功

image-20230929145103528

【4】访问路由返回数据

(1)定义路由及视图

from fastapi import FastAPI
from typing import Optional
from pydantic import BaseModel

# 创建 fastapi 对象
app = FastAPI()


# 定义模型表
class CityInfo(BaseModel):
    # 省份
    province: str
    # 城市
    country: str
    # 是否被感染 , Optional[bool] 与 bool 的区别是 可以不传,默认为 null
    is_affected: Optional[bool] = None

# 定义返回数据
@app.put('/city/{city}')
def result(city: str, city_info: CityInfo):
    '''

    :param city:  城市 -- 路径参数
    :param city_info:  携带的数据 必须符合上面定义的模型类
    :return:
    '''

    return {'city': city, 'province': city_info.province, 'country': city_info.country,
            'is_affected': city_info.is_affected}

(2)携带参数

  • 可以使用postman/apifox

image-20230929150140529

  • 也可以使用fastapi自带的 Swagger 接口工具

    • http://127.0.0.1:8000/docs

    image-20230929150237553

    • 携带参数,发起请求

    image-20230929150406676

    • 获取响应信息

    image-20230929150434507

【5】同步请求变异步请求

from fastapi import FastAPI
from typing import Optional
from pydantic import BaseModel

# 创建 fastapi 对象
app = FastAPI()


# 定义模型表
class CityInfo(BaseModel):
    # 省份
    province: str
    # 城市
    country: str
    # 是否被感染 , Optional[bool] 与 bool 的区别是 可以不传,默认为 null
    is_affected: Optional[bool] = None


# 定义路由 ---- 访问根路径返回指定内容
@app.get('/')
async def hellow_world():
    return {'hello': "world"}


# city : 路径参数
# /city/{city}?name=dream : ?name=dream 查询参数
@app.get('/city/{city}')
async def result(city: str, query_string: Optional[str] = None):
    '''

    :param city: 城市 -- 路径参数
    :param query_string: 请求参数 -- str 类型 默认可以为 None
    :return:
    '''
    return {'city': city, 'query_string': query_string}


# 定义返回数据
@app.put('/city/{city}')
async def result(city: str, city_info: CityInfo):
    '''

    :param city:  城市 -- 路径参数
    :param city_info:  携带的数据 必须符合上面定义的模型类
    :return:
    '''

    return {'city': city, 'province': city_info.province, 'country': city_info.country,
            'is_affected': city_info.is_affected}

【二】Fastapi的API交互文档docs

【1】接口地址

  • http://127.0.0.1:8000/docs

【2】总览

image-20230929150908349

【3】标头

image-20230929151009894

【4】无参请求

  • Curl 表示在Linux系统上如何发送请求
  • Response 可以自定义响应详细信息
  • Example Value 可以自己写一个请求的示例,这样前端可以直接使用我们的示例进行测试

image-20230929151203974

image-20230929151243467

image-20230929151330085

【5】有参请求

image-20230929151548846

image-20230929151707141

【6】有参PUT请求见上面

【三】Fastapi的API交互文档redoc

【1】接口地址

  • http://127.0.0.1:8000/redoc

【2】页面展示

image-20230929152052644

【3】说明

  • redoc只能查看我们接口相关的信息,但是无法进行交互时发送请求
posted @ 2023-10-01 15:30  Chimengmeng  阅读(67)  评论(0编辑  收藏  举报