python中fastapi设置查询参数可选或必选

目录
  • 可选查询参数
  • 必选查询参数
  • 可选和必选参数共存
  • 为可选参数做类型提示

前言:

在fastapi中,我们定义的查询参数是可以设置成:必选参数 or 可选参数。

可选查询参数

  • z只要给查询参数的默认值设置为None,表示该查询参数是可选参数。
 from fastapi import FastAPI
 ​
 app = FastAPI()​
 @app.get("/items/{item_id}")
 async def read_item(item_id: str, q=None):
     data = {"item_id": item_id}
     if q:
         data["q"] = q
     return data

补充:此时路径操作函数内的参数有两个,一个是路径参数item_id,一个是查询参数q,fastapi是可以区分他们的。

必选查询参数

  • 当你为查询参数设置默认值时,则该参数在URL中不是必须的。
  • 如果你不想添加默认值,而只是想使该参数成为可选的,则将默认值设置为 None
  • 但当你想让一个查询参数成为必需的,不声明任何默认值就可以.
  • 比如:这里的查询参数 needy 是类型为 str 的必需查询参数。
 from fastapi import FastAPI
 ​
 app = FastAPI()​
 @app.get("/items/{item_id}")
 async def read_user_item(item_id: str, needy: str):
     item = {"item_id": item_id, "needy": needy}
     return item
  • 如果在URL中没有查询参数needy,则报错
 {
     "detail": [
         {
             "loc": [
                 "query",
                 "needy"
             ],
             "msg": "field required",
             "type": "value_error.missing"
         }
     ]
 }

可选和必选参数共存

  • 也可以定义一些参数为必需的,一些具有默认值,而某些则完全是可选的
  • 此时:itme_id是路径参数,needy是必选路径参数,skip是有默认值必选查询参数,limit是可选查询参数。
 from fastapi import FastAPI
 ​
 app = FastAPI()
 @app.get("/items/{item_id}")
 async def read_user_item(
     item_id: str, needy: str, skip: int = 0, limit=None
 ):
     item = {"item_id": item_id, "needy": needy, "skip": skip, "limit": limit}
     return item

为可选参数做类型提示

  • 比如一个可选的参数q,如有该参数时,他的类型是整型,此时定义类型提示如下
  • 使用typing模块下的Union做类型提示,Union[int, None]表示类型是int或者None
  • 此时对于URL:http://127.0.0.1:8000/items/12?q=12,参数q就会自动转化为数字12
 from typing import Union​
 from fastapi import FastAPI
 app = FastAPI()​
 @app.get("/items/{item_id}")
 async def read_item(item_id: str, q: Union[int, None] = None):
     data = {"item_id": item_id}
     if q:
         data["q"] = q
     return data

补充1:

  • 可能为空的情况做类型提示,一般使用一个比typing.Union更加方便的类型:typing.Optional
  • 因为,Optional[X] is equivalent to Union[X, None]
  • 所以,上面的类似等价于q: Optional[int] = None\

补充2:

  • 只要给查询参数默认值None就表示它是可选查询参数,和类型提示无关。
  • 类型提示的功能在于如果该值存在是他应该是什么类型的变量并做类型转换和校验。

到此这篇关于python中fastapi设置查询参数可选或必选的文章就介绍到这了,更多相关python fastapi 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用Python FastAPI构建Web服务的实现

    FastAPI是一个使用 Python 编写的 Web 框架,还应用了 Python asyncio 库中最新的优化.本文将会介绍如何搭建基于容器的开发环境,还会展示如何使用 FastAPI 实现一个小型 Web 服务. 起步 我们将使用 Fedora 作为基础镜像来搭建开发环境,并使用 Dockerfile 为镜像注入 FastAPI.Uvicorn和 aiofiles这几个包. FROM fedora:32 RUN dnf install -y python-pip \ && dnf

  • Python使用Flask框架获取当前查询参数的方法

    本文实例讲述了Python使用Flask框架获取当前查询参数的方法.分享给大家供大家参考.具体如下: 这段代码实现Python的Flask框架下获取当前查询参数,即QueryString中的所有参数 from flask import Flask, render_template, request # Initialize the Flask application app = Flask(__name__) # This is a catch all route, to catch any r

  • python中fastapi设置查询参数可选或必选

    目录 可选查询参数 必选查询参数 可选和必选参数共存 为可选参数做类型提示 前言: 在fastapi中,我们定义的查询参数是可以设置成:必选参数 or 可选参数. 可选查询参数 z只要给查询参数的默认值设置为None,表示该查询参数是可选参数.  from fastapi import FastAPI  ​  app = FastAPI()​  @app.get("/items/{item_id}")  async def read_item(item_id: str, q=None)

  • PowerShell函数参数设置为即可选又必选的方法

    本文介绍PowerShell自定义函数中使用参数集时,可以将同一个参数既设置为可选,又设置为必选. 好吧,小编承认,这个话题有点无聊,但确实还是有点有趣,不妨看一看啦. 在PowerShell中,我们有可能有这样的需求,如果只需要输入某个参数时,这个参数是可选的.但如果还要输入别的参数,那这个参数就变成必选的了.那么这种需求如何来满足呢?那就是本文的意义所在了. 复制代码 代码如下: function Connect-Somewhere {     [CmdletBinding(DefaultP

  • Python中函数及默认参数的定义与调用操作实例分析

    本文实例讲述了Python中函数及默认参数的定义与调用操作.分享给大家供大家参考,具体如下: #coding=utf8 ''''' Python中的函数使用小括号调用.函数在调用之前必须先定义. 如果函数中没有return语句,就会自动返回None对象. Python是通过引用调用的.如果函数内对参数的改变会影响到原始对象. 只有可变对象会受此影响,对不可变对象,它的行为类似按值调用. ''' ''''' 定义函数: def function_name([arguments]): "option

  • 基于Python 中函数的 收集参数 机制

    定义函数的时候,在参数前加了一个 * 号,函数可以接收零个或多个值作为参数.返回结果是一个元组. 传递零个参数时函数并不报错,而是返回一个空元组.但以上这种方法也有局限性,它不能收集关键字参数. 对关键字参数进行收集的另一种 收集参数 机制:使用两个星号 ( ** ) ,用法同上.最后返回一个以参数名为键.参数值为键值的字典. * 和 ** 是可以一起使用的,返回特定的结果. 参数收集的用处之一是使我们编写函数时不用头疼将 N 多个参数都塞在一个括号里,既美观又省事.用处之二便是: * :可以将

  • python中如何设置代码自动提示

    第一步:打开pycharm,如下图所示: 第二步:File→Power Save Mode,把下面如图所示的勾去掉: 第三步:去掉勾后,不再使用省电模式,新建一个 python文件,输入需要输入的单词的前面的字母,就会自动提示了.如下图: 知识点扩展: Python代码的自动补全 我所知道的python编辑器有Pydev.Pycharm.Sublime.Eric.还有就是Vim.Emacs(听说VS也行). Pydev用过一段时间(半个月左右).Pycharm用的时间不超过2天(30天试用版).

  • 关于python中readlines函数的参数hint的相关知识总结

    readlines的帮助信息 >>> fr=open('readme.txt') >>> help(fr.readlines) Help on built-in function readlines: readlines(hint=-1, /) method of _io.TextIOWrapper instance Return a list of lines from the stream. hint can be specified to control the

  • Python中np.random.randint()参数详解及用法实例

    目录 可实现功能: np.random.randint() 根据参数中所指定的范围生成随机 整数. 参数 一.基础用法 二.高级用法 总结 可实现功能: 1.随机生成一个整数. 2.随机生成任意范围内的一个整数. 3.随机生成指定长度的整数组 4.随机生成指定长度的任意范围的整数组 5.随机生成指定长度的多维整数组 6.随机生成指定长度的任意范围的多维整数组 np.random.randint() 根据参数中所指定的范围生成随机 整数. numpy.random.randint(low, hig

  • 对python中使用requests模块参数编码的不同处理方法

    python中使用requests模块http请求时,发现中文参数不会自动的URL编码,并且没有找到类似urllib (python3)模块中urllib.parse.quote("中文")手动URL编码的方法.研究了半天发现requests模块对中文参数有3种不同的处理方式. 一.requests模块自动URL编码参数 要使参数自动URL编码,需要将请求参数以字典的形式定义,如下demo: import requests proxy = {"http":"

  • 简单谈谈Python中函数的可变参数

    前言 在Python中定义函数,可以用必选参数.默认参数.可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数和关键字参数. 可变参数( * ) 可变参数,顾名思义,它的参数是可变的,比如列表.字典等.如果我们需要函数处理可变数量参数的时候,就可以使用可变参数. 我们在查看很多Python源码时,经常会看到 某函数(*参数1, **参数2)这样的函数定义,这个*参数和**参数就是可变参数,一时会让人有点费解.其实只要把函

  • 在controller中如何设置接收参数的默认值

    目录 controller设置接收参数的默认值 @RequestParam代表的是请求参数注解 controller的传参问题 controller的映射 直接写类型,跟参数名 Request.getParameter方法 @RequestParam注解 @PathVariable注解 controller设置接收参数的默认值 public @ResponseBody Object queryActivityForPageByCondition( @RequestParam(value="kkk

随机推荐