FASTAPI的简单理解

一.FASTAPI的接口建立

app = FastAPI()

@app.post('/test/tran')  # url名称
async def deleteData(clientImageId: Optional[str] = Form(None), projectSn: Optional[str] = Form(None)):
    try:
        return {}  # ,返回结果
    except Exception as e:  # 报错处理
        return {}
        
if __name__ == '__main__':
    uvicorn.run(app='py文件名字:app', host='0.0.0.0', port=端口号, reload=True, debug=False)

注:根据需求,参数自行选择
debug:是否调试
reload:热加载

二.传入参数简介

1.路径参数

from fastapi import FastAPI
​
app = FastAPI()@app.get(path='/language/{language_id}')  # language_id 就是路径参数
async def find_language(language_id: int): 

return

上面的示例中,路径中的{language_id}声明了一个路径参数language_id,对应的函数find_language(language_id)中通过定义同名的函数参数来接受数据值,但此处未对参数类型进行定义,所以在返回数据时采用int(language_id)对数据值进行了类型转换

# 执行请求:
curl http://127.0.0.1:端口号/language/9  # 这儿的9就是language_id传入的数
{"lang":"R"}

在上面的代码中函数参数language_id被声明为int类型。

设置参数类型的好处:

可以提供编辑器支持,如:错误检查、完整性检查等

可以自动转换路径参数类型,如在上面的请求中,如果language_id不声明int类型,则按照字符串进行处理,声明为int类型后,则可自动转换为int类型。

# 另外,还可以提供数据类型的校验
curl http://127.0.0.1:端口号/language/python  # 这儿传入的是str的python 不符合上面设置的language_id:int类别  所以报错
{
    "detail":[
        {
            "loc":["path","language_id"],
            "msg":"value is not a valid integer",
            "type":"type_error.integer"
        }
    ]
}

注:路径参数、查询参数、表单数据等都可以进行数据校验

2.查询参数

from fastapi import FastAPI
app = FastAPI()
@app.get(path='/add')
async def find_language(vara: int = 0, varb: int = 0):    
    return {'added': vara + varb}


执行请求:
curl http://127.0.0.1:8000/add?"vara=2&varb=3"
{"added":5}

在上面的代码中,函数声明的参数vara和varb由于在路径中均没有声明,所以FastAPI会解析成查询参数;同时在代码中还为参数定义了默认值

除了int型的查询参数,还有布尔型的查询参数

3.表单参数

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...)):
    return {"username": username}

一般上传文件也是用表单参数上传

from fastapi import File, UploadFile
@app.post('/img/test')  # 读取CVS文件,对整个CSV文件的数据进行加载
async def upload_images(CSVFile: UploadFile = File(None)):
	return

UploadFile :文件参数
CSVFile:参数名

三.简单的参数校验

1.查询参数校验

from typing import Optional

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/")
async def read_items(q: Optional[str] = None):  # 查询参数 q 的类型是 Optional[str],即它的类型是 str,但也可以是 None(其实,是它的默认值为 None), q 是可选参数
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results

@app.get("/items/")
async def read_items(q: Optional[str] = Query(None, max_length=50)):  # 添加一些约束条件:即使 q 是可选的,但只要提供了该参数,该参数的长度就不能超过 50 个字符
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results

查询参数 q 的类型是 Optional[str],即它的类型是 str,但也可以是 None(其实,是它的默认值为 None), q 是可选参数

可以添加一些约束条件:即使 q 是可选的,但只要提供了该参数,该参数的长度就不能超过 50 个字符(上面代码)

除了上面的参数校验的约束方式以外还有其余的可以参考from fastapi import Query 的Query 函数里面有的参数

2.路径参数校验

from typing import Optional

from fastapi import FastAPI, Path, Query

app = FastAPI()


@app.get("/items/{item_id}")
async def read_items(
    item_id: int = Path(..., title="The ID of the item to get"),
    q: Optional[str] = Query(None, alias="item-query"),
):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    return results

因为路径参数必须是路径的一部分,所以路径参数总是必选的,因此,声明路径参数时要使用 …,把它标记为必选参数。不过,就算使用 None 声明路径参数,或设置其它默认值也不会有任何影响,路径参数依然是必选参数。

按需排序参数

假设要把查询参数 q 声明为必选的 str 类型。
而且,因为不用为该参数声明任何其它内容,因此无需使用 Query。
但仍需使用 Path 声明路径参数 item_id。
如果把有默认值的参数置于无默认值的参数前,Python 会报错。
但可以重新排序,把无默认值的查询参数 q 放到最前面。
FastAPI 不关注参数排序。只是通过声明的参数名称、类型和默认值(Query、Path 等)来检测参数,不关注参数的顺序。

from fastapi import FastAPI, Path

app = FastAPI()


@app.get("/items/{item_id}")
async def read_items(
    q: str, item_id: int = Path(..., title="The ID of the item to get")
):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    return results

中文官网:https://www.itdocs.icu/fastapi/tutorial/request-forms/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FastAPI 是一个基于 Python 的现代、快速(高性能)的 Web 框架。它可以用来构建高性能的 Web 应用程序和 API。FastAPI 使用异步框架 Starlette 来实现高并发的请求处理,同时利用 Pydantic 提供的强类型声明,使代码更易于阅读和理解。 SocketIO 是一个基于 WebSocket 的双向通信协议,它允许客户端和服务器之间进行实时、双向的通信。SocketIO 提供了一个简单而强大的方式来构建实时应用程序,例如聊天应用、实时更新、实时数据推送等。 FastAPI-SocketIO 是将 FastAPI 和 SocketIO 结合起来使用的框架,它使得我们可以使用 FastAPI 来构建实时应用程序。FastAPI-SocketIO 提供了一个易于使用的 API,我们只需编写少量的代码即可构建一个实时应用服务器。 使用 FastAPI-SocketIO,我们可以通过定义事件处理函数来响应客户端发送的事件。我们可以使用 Python 的装饰器来定义需要处理的事件名称,并编写事件处理函数来实现相应的逻辑。这样我们可以轻松地建立一个实时的通信渠道,实现客户端和服务器之间的双向通信。 另外,FastAPI-SocketIO 还支持在事件处理函数中使用依赖项注入,我们可以方便地访问数据库、缓存或其他外部服务。这使得我们可以更灵活地处理事件,并根据需要进行数据的读写操作。 总结来说,FastAPI-SocketIO 是一个结合了 FastAPI 和 SocketIO 的框架,它提供了一个简单而强大的方式来构建实时应用程序。通过使用 FastAPI-SocketIO,我们可以轻松地建立一个实时的通信渠道,实现客户端和服务器之间的双向通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值