FastAPI入门篇一Query参数与字符串验证

本文深入探讨了FastAPI中的Query参数,包括如何设置默认值、进行字符串验证、限制长度,以及使用正则表达式。此外,还介绍了如何创建必传参数和接收参数列表。FastAPI的Query参数验证功能强大,能够确保数据的有效性和安全性。
摘要由CSDN通过智能技术生成

前篇我们简单讲了FastAPI的路径参数,Query参数以及参数类型,算是领大家入了门,这篇来详细的讲解下FastAPI的Query参数与字符串验证。

让我们看下面的例①:

from typing import Optional
from fastapi import FastAPI

app = FastAPI()

@app.get("/items/")
async def read_items(q: Optional[str] = None):
    results = {"items": [{"item_id": "apple"}]}
    if q:
        results.get('items').append({"item_id": q})
    return results

观察上面代码,你会发现如下几点:

  • 包含一个Query参数q
  • 参数q的类型为Optional[str],这就意味着它的值只能是str类型或None
  • 参数q有默认值None,这意味着它变成了一个可选参数

得到这三点,上面的代码就理解了。

验证

大家在一些网站的注册页面,填写账号之类的信息时一般都会碰到要求输入的信息长度,比如必须在6-12个字符之间,这类的要求很常见,在FastAPI中,很方便的实现了这类的验证功能。

在验证之前先来看例②:

from typing import Optional
from fastapi import FastAPI, Query

app = FastAPI()

@app.get("/items/")
async def read_items(q: Optional[str] = Query(None)):
    results = {"items": [{"item_id": "apple"}]}
    if q:
        results.get('items').append({"item_id": q})
    return results

在例②中,我们从fastapi中导入了Query,并把q参数的默认值改成了Query(None)

这里导入了Query,那么它在上例中起到了什么作用呢?

Query的第一个参数用于定义默认值。

q: Optional[str] = Query(None) 等价于 q: Optional[str] = None

我们明白了Query第一个参数的作用,那不禁要问Query有没有其他的参数呢?

一起来看下面的例③:

from typing import Optional
from fastapi import FastAPI, Query

app = FastAPI()

@app.get("/items/")
async def read_items(q: Optional[str] = Query(None, min_length=6, max_length=12)):
    results = {"items": [{"item_id": "apple"}]}
    if q:
        results.get('items').append({"item_id": q})
    return results

这个例子是从例②修改而来,细心的你可能已经发现了它的不同之处:

  • Query(None) 变成了Query(None, min_length=6, max_length=12)

这个例子中,出现了两个新的参数,它们适用于字符串类型的参数

  • min_length  允许的最小长度
  • max_length  允许的最大长度

这将验证数据,当数据无效时显示清楚的错误。

Query其他一些常见的参数

  • lt   需小于多少,适用于数值类型的参数
  • le  需小于等于多少,适用于数值类型的参数
  • gt  需大于多少,适用于数值类型的参数
  • ge 需大于多少,适用于数值类型的参数

使用正则表达式验证

  • regex  可以定义参数应匹配的正则表达式

一起来看下面的例④:

from typing import Optional
from fastapi import FastAPI, Query

app = FastAPI()

@app.get("/items/")
async def read_items(q: Optional[str] = Query(None, regex=r'^\d+$')):
    results = {"items": [{"item_id": "apple"}]}
    if q:
        results.get('items').append({"item_id": q})
    return results

上面的例子中,用正则限制了参数的输入只能接收数字组成的字符串。

regex参数的写法:

  • 以 ^ 符号开头
  • 以 $ 符号结尾
  • 中间为正则表达式内容

必传参数

Query的第一个参数用于设置默认值,那么一但设置了该参数就因为设置了默认值而变成了可选参数,那么怎么通过它来设置必传的参数呢?

来一起看下面的例⑤:

from typing import Optional
from fastapi import FastAPI, Query

app = FastAPI()

@app.get("/items/")
async def read_items(q: Optional[str] = Query(..., max_length=20)):
    results = {"q": q}
    return results

Query第一个参数传入...,来设置参数q是必传参数。

 Query参数列表/多个值

当你明确用 Query定义Query参数的时候,你也可以声明该参数获取一个列表,或者说获取多个值。

来看下面的例⑥:

from typing import List
from fastapi import FastAPI, Query

app = FastAPI()

@app.get("/items/")
async def read_items(q: List[str] = Query(..., max_length=10)):
    results = {'q': q}
    return results

通过上面所讲内容,分析下该代码:

  • Query参数q
  • 类型为List且其内元素必须为str类型
  • 必传
  • 最大长度10

分析完成后,可以访问下面连接:

http://127.0.0.1/items/?q=banana&q=apple 

此时会收到参数q的多个值,并用列表存储。

测试上面代码输出为:

{
    "q":["banana","apple"]
}

注意:要声明类型为list的Query参数,需要使用Query,否则它将被解释成请求正文。

使用 list

例⑥中,你会发现在输入的时候限制了输入类型,如果不想限制该怎么办呢?

来看例⑦:

from fastapi import FastAPI, Query

app = FastAPI()

@app.get("/items/")
async def read_items(q: list = Query([])):
    results = {'q': q}
    return results

 

在这种情况下,FastAPI将不会检查列表的内容。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值