FastAPI: 请求查询参数(3)

声明不是路径参数的其他参数时,自动解释成查询参数,也就是位于 URL 的 之后,并以 & 符号分隔的键值对的集合。

默认参数

1
2
3
4
5
users = [{'name': 'zhangsan'}, {'name': 'lisi'}, {'name': 'wangwu'}]

@app.get('/users/')
def root(start: int = 0, limit: int = 2):
return users[start : limit]

start=0limit=2 的默认值,下面两种方式访问,结果是一样的

1
2
http://127.0.0.1:8000/users/
http://127.0.0.1:8000/users/?start=0&limit=2

必填参数

不声明默认值的参数就是默认参数。注意,有默认值参数和必填参数值都存在时,有默认值参数必须放到必填参数后边。

1
2
3
4
5
users = [{'name': 'zhangsan'}, {'name': 'lisi'}, {'name': 'wangwu'}]

@app.get('/users/')
def root(start: int, limit: int = 2):
return users[start : limit]

start是填参数,如果不写会报错。

1
2
3
http://127.0.0.1:8000/users/?limit=2

{"detail":[{"loc":["query","start"],"msg":"field required","type":"value_error.missing"}]}

可选参数

用Optional,默认值设置为 None 来声明可选参数

1
2
3
4
5
6
7
users = [{'name': 'zhangsan'}, {'name': 'lisi'}, {'name': 'wangwu'}]

@app.get('/users/')
def root(start: int = 0, limit: Optional[int] = None):
if limit:
return users[start : limit]
return users[start: ]

结果

1
2
3
http://127.0.0.1:8000/users/?start=0

[{"name":"zhangsan"},{"name":"lisi"},{"name":"wangwu"}]

路径和查询参数

1
2
3
4
5
6
7
books = [{'name': 'python'}, {'name': 'fastapi'}, {'name': 'java'}, ]

@app.get('/users/{id}')
def root(id: int, start: int = 0, limit: Optional[int] = None):
if limit:
return {id: books[start : limit]}
return {id: books[start: ]}

结果

1
2
3
4
5
http://127.0.0.1:8000/users/123
{"123":[{"name":"python"},{"name":"fastapi"},{"name":"java"}]}

http://127.0.0.1:8000/users/123?start=1
{"123":[{"name":"fastapi"},{"name":"java"}]}
唐胡璐 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
分享创造价值,您的支持将鼓励我继续前行!