FASTAPI系列 05-参数的校验

FASTAPI系列 05-get请求参数的校验



前言

get请求参数的校验, 校验用户提交参数是否合法;

+V lzq599220 送python测试开发视频全套资料 总共80G

一、查询参数和字符串校验

FastAPI 允许为参数声明额外的信息和校验。已一下代码为例:

from fastapi import FastAPI
from typing import Optional

app = FastAPI()


@app.get("/courses/")
async def get_course(course_name: Optional[str] = None):
    results = {"courses": [{"course_name": "python"}, {"course_name": "java"}]}
    if course_name:
        results.update(

查询参数 course_name的类型为 str,默认值为 None,因此它是可选的。

Optional[T] 表示的是 T 类型或者 None 类型的联合(Union),也就是说变量或函数的返回值可以是 T 类型,也可以是 None 类型。在类型注解中使用 Optional 可以明确地表达这种可能性,防止因意外传递 None 值导致运行时错误

二、带条件的校验

1. 传入参数长度校验

添加约束条件: course_name 是可选的,但只要提供了该参数,则该参数值不能超过50个字符的长度;所以,从 fastapi 导入 Query

@app.get("/courses/")
async def get_course(course_name: Optional[str] = Query(None, max_length=50, min_length=3)):
    results = {"courses": [{"course_name": "python"}, {"course_name": "java"}]}
    if course_name:
        results.update({"course_name": course_name})
    return results


if __name__ == '__main__':
    import uvicorn

    uvicorn.run(app, host="0.0.0.0", port=8000)

现在,将 Query 用作查询参数的默认值,并将它的 max_length 参数设置为 50, min_length参数设置为3;

由于我们必须用 Query(None) 替换默认值 None,Query 的第一个参数同样也是用于定义默认值。所以:

course_name: str = Query(None)

等同于

course_name: str = None

但是 Query 显式地将其声明为查询参数。然后,我们可以将更多的参数传递给 Query。适用于字符串的 max_length ,min_length参数:

course_name: Optional[str] = Query(None, max_length=50, min_length=3

将会校验数据,在数据无效时展示清晰的错误信息。

2. 添加默认值,当不传参数值,为带入的默认参数

代码示例如下

@app.get("/courses/")
async def get_course(course_name: Optional[str] = Query("TeacherLi", max_length=50, min_length=3)):
    results = {"courses": [{"course_name": "python"}, {"course_name": "java"}]}
    if course_name:
        results.update({"course_name": course_name})
    return results

我们替换了None的值为Teacher Li, 当我们不参数时,默认值就为Teacher Li

3. 使用Query查询时,怎么使得参数为必填

当我们不需要声明额外的校验或元数据时,只需不声明默认值就可以使 course_name参数成为必需参数,例如:course_name: str 代替:q: course_name = None

但是,当我们使用Query查询时,要如何去声明呢,因此,当你在使用 Query 且需要声明一个值是必需的时,可以将 … 用作第一个参数值:

@app.get("/courses/")
async def get_course(course_name: Optional[str] = Query(..., max_length=50, min_length=3)):
    results = {"courses": [{"course_name": "python"}, {"course_name": "java"}]}
    if course_name:
        results.update({"course_name": course_name})
    return results

在这里插入图片描述


总结

在FASTAPI框架中,GET请求参数的校验是非常重要的一部分,它能够确保用户提交的参数符合预期格式,从而保证API服务端的正常运行和数据安全性。对于GET请求中的查询参数,可以通过类型注解结合Query对象来进行详细的参数校验。

更多资料,请关注公众号 ,发送666 即刻领取相关python开发资料~

在这里插入图片描述

  • 41
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值