FastAPI 学习之路(三)

之前的文章分享了如何去创建一个简单的路径的请求。那么我们这次分享的如何在请求路径中,增加参数。

我们还是在之前的请求中改造

@app.get("/")
def root():
    return {"message": "Hello World"}

那么如何让它带参数呢,很简单

@app.get("/{name}")
def root(name):
    return {"name": name}

那么我们去请求下,看下是否可以带参数

是可以返回对应的数据的。

    如果我们不带这个路径参数,会返回什么呢

假如,我们想要约定name的数据是int类型,怎么约定呢

from fastapi import FastAPI
app = FastAPI()
@app.get("/{name}")
def root(name:int):
    return {"name": name}

 很简单的方式,就实现了如何定义路径参数为int类型,那么我们看下,如果我们传递的不是int类型,接口给我们返回的结果是什么

 那么我们携带int类型的参数呢

参数可以正确返回我们想要的数据。不管是int类型的输入,还是非int类型的输入,都会有对应输出,FastAPI 通过上面的类型声明提供了对请求的自动解析。

当你打开对应的文档,你会发现文档上面已经把对应参数的需要的类型给增加上去了。

我们在文档中调试下。当你输入的类型不正确的时候,默认是无法点击Execute的。

只有输入正确格式的路径参数才会请求

 假设你有另外一个路径参数one,如下

from fastapi import FastAPI
app = FastAPI()


@app.get("/{name}")
def root(name:int):
    return {"name": name}


@app.get("/one")
def root():
    return {"one": 'welcome to china'}

 这个时候,你说请求one应该返回什么?是不是和自己想的不太一样?

这是为什么呢,其实呢,这是因为fastapi会按照路径的顺序匹配,当你输入one,默认匹配的是第一个带参数的路径,那么我们现在调整下

from fastapi import FastAPI

app = FastAPI()


@app.get("/one")
def read_item():
    return {"one": "welcome to china"}


@app.get("/{name}")
def read_item(name: int):
    return {"name": name}

 这样我们再请求的时候,就会发生了变化

 

所以我们在编写代码的时候,一定要注意,相同匹配的时候,默认只会按照顺序匹配。

 我们在之前的带参数路径请求的函数中,我们有这样的需求,我们要求只能输入我们规定的数据,才能返回对应的数据。

       这个时候呢,推荐用枚举,我们看下如何实现的。

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默认会给你处理一些异常。返回比较好处理的数据。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值