FlaskAPI-路径参数、查询参数

诗林  论坛元老 | 2024-12-29 03:11:48 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1341|帖子 1341|积分 4023

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1 路径参数

        在 Flask 中,路径传参是一种常见的通报数据的方式。通过在 URL 路径中指定参数,可以让视图函数根据不同的参数值来返回不同的内容。这种方式可以用于根据用户请求的不同资源(如用户 ID、产品编号等)来提供定制化的响应。
1.1简单路径参数通报

        界说路由时,在路径中使用<参数名>的情势来表示参数。比方,如果你有一个根据用户 ID 显示用户信息的功能,路由可以这样界说:
  1. @app1.get("/user/{id}")
  2. def get(id):
  3.     print(type(id))
  4.     return {"message": id}
复制代码
我们必要留意在路由函数get中必要有一个参数来接受路径传的参数,且要名字一致。
1.2 参数范例指定与其他限制

         Flask 允许指定路径参数的范例。默认情况下,路径参数是字符串范例。如果要指定其他范例,好比整数,可以在参数名背面加上范例转换符。我们修改上面的方法,在传参的位置添加上范例转换。下面是指定参数范例的语法:
  1. latitude:int
复制代码
  1. @app1.get("/user/{id}")
  2. def get(id:int):
  3.     print(type(id))
  4.     return {"message": id}
复制代码
在 FastAPI 中,可以使用Path函数来对路径参数进行更机动的限制和设置默认值等操纵,以下是具体的使用方法:
基本使用


  • 起首必要从fastapi库中导入Path:
  1. from fastapi import APIRouter, Path
复制代码


  • 然后在界说路由函数的路径参数时,使用Path函数来包裹参数并进行设置。比方:
  1. router = APIRouter()
  2. @router.route('/user/{user_id}')
  3. def user_info(user_id: int = Path(..., title="用户ID", description="用户的唯一标识", gt=0)):
  4.     return f"用户ID为 {user_id} 的信息"
复制代码


  • 在上述示例中,Path函数中的...表示该参数是必需的,不能省略。title和description分别为参数添加了标题和描述,这些信息会在自动生成的 API 文档中显示。gt表示该参数必须大于 0,这样就对路径参数user_id进行了更详细的限制和分析。
设置默认值


  • 除了设置必需参数外,还可以使用Path函数设置路径参数的默认值。比方:
  1. @router.route('/product/{product_id}')
  2. def product_info(product_id: int = Path(1, title="产品编号", description="产品的唯一编号", le=100)):
  3.     return f"产品编号为 {product_id} 的信息"
复制代码


  • 这里Path函数中的1表示product_id的默认值为 1,同时le表示该参数必须小于等于 100,这样就既设置了默认值又对参数进行了限制。
复杂限制条件


  • 可以同时使用多个限制条件,如gt(大于)、ge(大于等于)、lt(小于)、le(小于等于)等。比方:
  1. @router.route('/range/{num}')
  2. def range_info(num: int = Path(50, title="数字", description="一个在特定范围内的数字", gt=0, lt=100)):
  3.     return f"数字 {num} 在指定范围内的信息"
复制代码


  • 此例中,num的默认值为 50,且必须满足大于 0 小于 100 的条件,对路径参数进行了较为复杂的限制。
字符串范例参数的限制


  • 对于字符串范例的路径参数,同样可以使用Path函数进行限制。比方:
  1. @router.route('/string/{text}')
  2. def string_info(text: str = Path(..., title="文本", description="一段特定的文本", min_length=3, max_length=10)):
  3.     return f"文本 {text} 的信息"
复制代码


  • 这里要求text参数是必需的,且长度必须在 3 到 10 个字符之间,对字符串路径参数进行了限制。
2 查询参数

        在 Flask API 中,查询参数是 URL 中 “?” 背面的键值对部分,用于向服务器通报额外的信息。这些参数对于筛选、排序、分页等操纵非常有效。比方,在一个获取用户列表的 API 中,可以通过查询参数指定只获取特定年事范围的用户,大概按照用户名字排序。
我们可以直接通过路由函数中的参数来接受传过来的查询参数,如下:
这是请求:http://127.0.0.1:8000/user?id=11&name=‘test’
  1. @app1.get("/user")
  2. def get(id,name):
  3.     return {"id": id,"name":name}
复制代码
打开交互式文档,输出如下:

固然,我们还可以通过对函数传的参数进行限定,这与上文介绍的路径传参的限定一样,下文是对上面的补充,我们可以通过Union对通报参数进行限定,也就是id,可以是int,None,str范例。
  1. @app1.get("/user")
  2. def get(id:Union[int,None,str],name):
  3.     return {"id": id,"name":name}
复制代码
Optional:Optional范例表示一个变量可以是指定范例的值大概是None。它实际上是Union的一种特殊情况,即Optional[X]等价于Union[X, None]。
固然我们也可以同时对范例和默认值大概是传入值进行限定。如下:
  1. @app1.get("/user")
  2. def get(name,id:Union[int,None,str]=Path(None,title="用户id",description="用户id",gt=0)):
  3.     return {"id": id,"name":name}
复制代码
参数:name: 用户名称。id: 用户ID,可以是整数、字符串或None,默认值为None,而且使用了FastAPI的Path参数进行描述和验证。
留意,带默认值的参数要放在不带默认值参数后。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

诗林

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表