-
FastAPI 学习之路(三)
之前的文章分享了如何去创建一个简单的路径的请求。那么我们这次分享的如何在请求路径中,增加参数。
我们还是在之前的请求中改造
1
2
3
|
@app .get( "/" ) def root(): return { "message" : "Hello World" } |
那么如何让它带参数呢,其实很简单
1
2
3
|
@app .get( "/{name}" ) def root(name): return { "name" : name} |
那么我们去请求下,看下是否可以带参数,我们去带一个name。看下借口返回什么。
那么我们携带别的路径参数呢。
同样是可以返回对应的数据的。
如果我们不带这个路径参数,会返回什么呢
假如,我们想要约定name的数据是int类型,怎么约定呢
1
2
3
4
5
|
from fastapi import FastAPI app = FastAPI() @app .get( "/{name}" ) def root(name: int ): return { "name" : name} |
很简单的方式,就实现了如何定义路径参数为int类型,那么我们看下,如果我们传递的不是int类型,接口给我们返回的结果是什么
那么我们携带int类型的参数呢
参数可以正确返回我们想要的数据。不管是int类型的输入,还是非int类型的输入,都会有对应输出,FastAPI 通过上面的类型声明提供了对请求的自动解析。
当你打开对应的文档,你会发现文档上面已经把对应参数的需要的类型给增加上去了。
我们在文档中调试下。当你输入的类型不正确的时候,默认是无法点击Execute的。
只有输入正确格式的路径参数才会请求
假设你有另外一个路径参数one,如下
1
2
3
4
5
6
7
8
|
from fastapi import FastAPI app = FastAPI() @app .get( "/{name}" ) def root(name: int ): return { "name" : name} @app .get( "/one" ) def root(): return { "one" : '雷子欢迎你' } |
这个时候,你说请求one应该返回什么?
正常我们想着应该返回{"one": '雷子欢迎你'},结果却是
这是为什么呢,其实呢,这是因为fastapi会按照路径的顺序匹配,当你输入one,默认匹配的是第一个带参数的路径,那么我们现在调整下
1
2
3
4
5
6
7
8
|
from fastapi import FastAPI app = FastAPI() @app .get( "/one" ) def root(): return { "one" : '雷子欢迎你' } @app .get( "/{name}" ) def root(name: int ): return { "name" : name} |
这样我们再请求的时候,就会发生了变化
所以我们在编写代码的时候,一定要注意,相同匹配的时候,默认只会按照顺序匹配。
我们在之前的带参数路径请求的函数中,我们有这样的需求,我们要求只能输入我们规定的数据,才能返回对应的数据。
这个时候呢,推荐用枚举,我们看下如何实现的。
1
2
3
4
5
6
7
8
9
10
11
12
|
from fastapi import FastAPI from enum import Enum app = FastAPI() class ModelName( str , Enum): beijing = "1" shanghai = "2" @app .get( "/{name}" ) def root(name:ModelName): if name = = ModelName.beijing: return "北京欢迎你" if name = = ModelName.shanghai: return "您好上海" |
我们看下接口如何返回
我们看下接口文档中如何展示
默认我们只能限定输入这两个。其他的在接口文档没法输入,在接口请求中会返回错误信息。fastapi默认会给你处理一些异常。返回比较好处理的数据。
出处:https://www.cnblogs.com/leiziv5/p/15333468.html