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对象来进行详细的参数校验。