FastAPI框架入门

本文介绍了FastAPI框架的入门步骤,包括安装、启动项目、设置 Swagger 和 Redoc 文档,以及参数传递方式如GET、JSON、路径参数和文件上传。还提到了项目布局和自定义用户Token验证的实现。
摘要由CSDN通过智能技术生成

介绍

  • 快速:非常高的性能、异步框架,看齐的NodeJS和Go(感谢Starlette和Pydantic)。现有最快的Python框架之一。
  • 快速编码:将功能开发速度提高约200%至300%。
  • 自动:不需要开发人员去校对数据类型
  • 健壮:获取可用于生产的代码。具有自动交互式文档。
  • 基于标准:基于(并完全兼容)API的开放标准:OpenAPI(以前称为Swagger)和JSON Schema。

安装

环境: Python3.7.7,Windows10

pip install fastapi uvicorn  # fastapi以及启动用
pip install aiofiles jinja2  # 配置使用静态文件和模板文件需要
pip install python-multipart  # form表单数据需要
  • 如果pip install fastapi[all] 会安装所有模块,不建议使用

入门

from fastapi import FastAPI

app = FastAPI()


@app.get("/")  # 监听GET请求
async def read_root():
    return {
   "Hello": "World"}  # 返回json

然后运行即可,默认端口是8000,reload即Debug模式开

端口运行

uvicorn main:app --reload

也可以在main.py里加上这段代码,然后python main.py运行

import uvicorn

if __name__ == '__main__':
	uvicorn.run('main:app', reload=True,
                host='0.0.0.0', port=8000)

swagger 可交互api文档

  • 打开127.0.0.1:8000/docs 即可,可交互api文档

redoc

  • 127.0.0.1:8000/redoc, 接口文档

传参

get传参

  • get请求时,参数通常在url拼接参数和query方式
  • 举例:http://127.0.0.1:8000/user/10?mod=login
@app.get("/user/{user_id}")
async def user_mod(user_id: int, mod: str = None):  # str = None 代表mod参数可以为空
    return {
   
        "user_id": user_id,
        "mod": mod
    }

json和form表单传参

  • form-data方式时需要pip安装python-multipart
  • 可以使用我们可以采用 application/json 的方式传参, 并且定义一个参数类来管控参数
from fastapi import FastAPI
from fastapi import Form
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):  # 定义一个类用作参数
    name: str
    price: float
    is_offer: bool = None  # 该字段可为空

@api.post("/{item_id}")
async def get_item(item_id: int = 1, item: Item, form_param: str = Form(...)):  # item需要与Item对象定义保持一致
	# Form(...)代表必填
    return {
   
        "item_name": item.name,
        "item_id": item_id,
        'form_param': form_param  # 这是form参数
    }

接口文档界面可以查看参数并进行测试
在这里插入图片描述

使用枚举限定参数

from enum import Enum

class ModelName(str, Enum):
    alexnet = "alexnet"
    resnet = "resnet"
    lenet = "lenet"

@app.get("/model/{model_name}")
async def get_model(model_name: ModelName):  # 限定参数必须是ModelName枚举中的
	pass
	return model_name

URL传递路径参数

  • 有时候需要传递路径参数给后端,例如 http://127.0.0.1:8000/files//home/johndoe/myfile.txt
  • 这样file_path收到的内容为‘/home/johndoe/myfile.txt’
@app.get("/files/{file_path:path}")
async def read_file(file
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值