写点什么

FastApi-08- 路径参数校验

发布于: 3 小时前
FastApi-08-路径参数校验

背景

和查询参数一样,路径参数也需要进行限定。

Path

通常,我们会直接使用 name:str='phyger'的方式来限定路径参数的类型和默认值,但是对于路径参数的高级元数据,我们需要借助 FastApi 为我们提供的 Path 对象来实现。


通常路径参数时必须的,所以即便你指定了默认参数,其依然是必须的。

路径参数的 title

from fastapi import Path@app.get('/path/{name}')async def pth(name:str=Path(...,title='path name')):    return {'path_name':name}
复制代码

限定路径参数的格式

数值校验


大于2:gt=2小于2:lt=2大于等于2:ge=2小于等于2:le=2
复制代码


from fastapi import Path@app.get('/path/{name}')async def pth(* ,name:int=Path(...,title='path name',ge=2),q:str):    return {'path_name':name}
复制代码


路径参数的顺序问题

当我们的业务模型中有两个 uri,一个路径参数是固定值,另一个是路径参数是变量,该如何处理呢?


假设当前业务中的视图有如下两条:


@app.get('/path/{name}')async def pth(name:str=Path(...,title='path name')):    return {'path_name':name}   
@app.get('/path/default')async def f1(): return {'msg':'I am default path.'}
复制代码


分析以上代码,当我们请求/path/default的时候,我们会得到{'msg':'I am default path.'}的结果。


测试一下:


结果


这是怎么回事?和我预期的不一致。


这是因为代码中的两个 uri 冲突了,对于/path/default而言,/path/{name}已经拦截了所有符合/path/xxx的请求。我们只要将他两的顺序调整为固前变后(固定路径参数在前,变化路径参数在后)即可。

修改的代码

@app.get('/path/default')async def f1():    return {'msg':'I am default path.'}

@app.get('/path/{name}')async def pth(name:str=Path(...,title='path name')): return {'path_name':name}
复制代码


再次测试:


测试结果


可以看到,/path/default已经成功拦截并返回正确的结果。


再测试下非固定参数的功能:



可以看到,我们的非固定路径参数的其他功能均正常。

发布于: 3 小时前阅读数: 3
用户头像

公众号:Python测试和开发 2018.10.14 加入

混迹于云原生领域的测试开发。

评论

发布
暂无评论
FastApi-08-路径参数校验