FastApi-07-查询参数校验

简介: FastApi-07-查询参数校验

问题抛出


前面我们已经了解了查询参数,但是实际开发中我们可能需要限定参数的类型,长度等其他属性。这个时候我们就需要对查询参数进行校验。


类型我们可以通过显示类型进行限制,但是长度等其他属性我们需要借助 FastApiQuery 对象来实现。


实例


实现方式


参数限定,我们需要借助 fastapi 中的 Query 对象来实现。


导入 Query


from fastapi import Query
复制代码


限定参数最大长度


使用参数:max_length


@app.get('/len')
async def get_len(q:str=Query(...,max_length=2)):
    res = {'name':'phyger'}
    if q:
        res.update({'q':q})
    return res
复制代码


网络异常,图片无法展示
|


从以上测试可知:


查询参数 q 为可选参数、最大长度为 2,超过最大长度 fastapi 将会报错。


限定参数最小长度


使用参数:min_length


@app.get('/len')
async def get_len(q:Optional[str]=Query(None,min_length=2,max_length=5)):
    res = {'name':'phyger'}
    if q:
        res.update({'q':q})
    return res
复制代码


网络异常,图片无法展示
|


Query 类型的查询参数必须制定默认值。形如:Query(...,min_length=2,max_length=5)


除了限定长度,我们还可以通过 regex 属性来通过正则表达式限定参数格式


默认查询参数


可选查询参数: 通常我们使用 Optional 类型结合 Query 类型的默认值来实现;


async def get_len(q:Optional[str]=Query(None,min_length=2,max_length=5)):
    pass
复制代码


async def get_len(q:str=Query(None,min_length=2,max_length=5)):
    pass
复制代码


以上两种方式都可。


必选查询参数: 通常我们指定 Query 的默认值为...来实现。


async def get_len(q:str=Query(...,min_length=2,max_length=5)):
    pass
复制代码


Optional 类型和...默认参数同时存在的时候,查询参数依然为必选。


多个查询参数


当我们需要设计多个查询参数的时候,我们可以这样写。


from typing import List
from fastapi import Query
@app.get('/len')
async def get_len(q:Optional[List[str]]=Query(...,min_length=2,max_length=5)):
    res = {'name':'phyger'}
    if q:
        res.update({'q':q})
    return res
复制代码


网络异常,图片无法展示
|


直接使用 list 也可以


from typing import List
from fastapi import Query
@app.get('/len')
async def get_len(q:Optional[list]=Query(...)):
    res = {'name':'phyger'}
    if q:
        res.update({'q':q})
    return res
复制代码


网络异常,图片无法展示
|


更多的元数据


title


Querytitle 属性可以让我们指定参数的标题,用做提示。


from fastapi import Query
@app.get('/title/')
async def title(name:str = Query(...,title="test title",max_length=5,min_length=2)):
    return {'result':name}
复制代码


description


from fastapi import Query
@app.get('/title/')
async def title(name:str = Query(...,title="test title",max_length=5,min_length=2,description='test desc')):
    return {'result':name}
复制代码


doc 中的效果


网络异常,图片无法展示
|


别名


实际应用中,有时候查询参数可能形如 x-name,这在 python 中不是合法的变量,为了解决类似问题,FastApi 为我们提供了别名 alias 功能。


from fastapi import Query
@app.get('/title/')
async def title(name:str = Query(...,max_length=5,min_length=2,alias='x-name')):
    return {'result':name}
复制代码


网络异常,图片无法展示
|


参数弃用


当我们计划在后续版本中废弃参数时,我们可以通过 deprecated 属性来提示用户。


from fastapi import Query
@app.get('/title/')
async def title(name:str = Query(...,max_length=5,min_length=2,alias='x-name',deprecated=True)):
    return {'result':name}
复制代码


接口文档中的效果


网络异常,图片无法展示
|



感谢您的阅读,别忘了关注,点赞,评论,转发四连哟!

相关文章
|
数据采集 JSON JavaScript
全面拥抱FastApi —三大参数及验证
全面拥抱FastApi —三大参数及验证
|
3月前
|
开发框架 JSON API
Python中FastAPI项目使用 Annotated的参数设计
Python中FastAPI项目使用 Annotated的参数设计
|
6月前
|
Python
Fastapi进阶用法,路径参数,路由分发,查询参数等详解
Fastapi进阶用法,路径参数,路由分发,查询参数等详解
324 1
|
网络安全 Windows
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
|
前端开发 中间件 API
FastAPI第二天---参数校验
FastAPI第二天---参数校验
228 0
FastAPI第二天---参数校验
|
NoSQL 测试技术 Redis
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
|
存储 测试技术 数据安全/隐私保护
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
|
测试技术 数据安全/隐私保护
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(上)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(上)
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架