Python零基础从小白打怪升级中~~~~~~~FaskAPI中的请求和响应

第二节:FastAPI中请求数据

一、URL请求参数

url请求参数是通过url请求地址携带的,例如,在以下 url 中:

http://127.0.0.1:8000/items/?skip=0&limit=10

这些请求参数是键值对的集合,这些键值对位于 URL 的 之后,并以 & 符号分隔。

请求参数为:

  • skip:对应的值为 0
  • limit:对应的值为 10

当你为它们声明了 Python 类型(在上面的示例中为 int)时,它们将转换为该类型并针对该类型进行校验。

from fastapi import FastAPI

app = FastAPI()

fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]


@app.get("/items/")
def read_item(skip: int = 0, limit: int = 10):
    return fake_items_db[skip : skip + limit]

URL请求参数不是路径的固定部分,因此它们可以是可选的,并且可以有默认值。

在上面的示例中,它们具有 skip=0limit=10 的默认值。你可以将它们的默认值设置为 None

from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id: str, q: Union[str, None] = None, short: bool = False):
    item = {"item_id": item_id}
    if q:
        item.update({"q": q})
    if not short:
        item.update(
            {"description": "This is an amazing item that has a long description"}
        )
    return item

Union是Python 3.10版本引入的新类型,它允许创建多种类型的联合(union)。,Union类型是一种用于表示一个变量可以是多个不同类型之一的类型注解。它是typing模块中的一个类,可以与其他类型一起使用,以指定一个变量可以接受的多个类型。

Union类型的语法为:Union[type1, type2, …]
这里的type1、type2等代表要包含在Union类型中的类型。

注意:当你想让一个查询参数成为必需的,不声明任何默认值就可以:

@app.get("/items/{item_id}")
def read_user_item(
    item_id: str, needy: str, skip: int = 0, limit: Union[int, None] = None
):
    item = {"item_id": item_id, "needy": needy, "skip": skip, "limit": limit}
    return item

在这个例子中,有3个查询参数:

  • needy,一个必需的 str 类型参数。
  • skip,一个默认值为 0int 类型参数,也是可选的。
  • limit,一个可选的 int 类型参数。

二、请求数据校验

1、Query校验数据

QueryFastAPI专门用来装饰请求参数的类,也可以提供校验。

1)默认值设置,和参数接口描述

@app.get("/items/")
async def read_items(q: Union[str, None] = Query(default=None, description="参数q可以传入字符串或者不传")):
    query_items = {"q": q}
    return query_items

descriptionQuery中的一个字段,用来描述该参数;

2)字符串长度校验

@app.get("/items2/")
async def read_items(q: Union[str, None] = Query(default=None, max_length=50, min_length=3)):
    query_items = {"q": q}
    return query_items

注意:max_lengthmin_length仅可用于 str 类型的查询参数。

3)正则表达式校验

@app.get("/items3/")
async def read_items(
    q: Union[str, None] = Query(default=None, regex="^laoxiao$")
):
    query_items = {"q": q}
    return query_items

也就是说该接口的查询参数只能是" laoxiao",不然就会报错,当然其他的正则表达式都是可以拿来用的!

4)数值大小校验

如果参数的类型是int,float就可以采用Query进行大小校验,或者范围校验。

@app.get("/test4/")
async def read_items4(id: int = Query(description="id参数必须是0到1000之间", gt=0, le=1000), q: str = Query(default=None)):
    results = {"item_id": id}
    if q:
        results.update({"q": q})
    return results
  • gt:大于(greater than)
  • ge:大于等于(greater than or equal)
  • lt:小于(less than)
  • le:小于等于(less than or equal)

三、url请求参数中传入一组值

我们还可以使用 Query 去接收一组值。使用 List[str] 来接收一组值,里面的str可以根据需求随意调换。

@app.get("/test5/")
async def read_items(q: Union[List[str], None] = Query(default=None, description='q可以传入多个值')):
    query_items = {"q": q}
    return query_items

image.png

这是因为参数 q中以一个 Python list 的形式接收到查询参数 q 的多个值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/539936.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

php反序列化(2)

一.pop链 在反序列化中,我们能控制的数据就是对象中的属性值(成员变量),所以在php反序列化中有一种漏洞利用方法叫“面向属性编程”,即pop(property oriented programming)。 pop链就是利用魔…

ES6基础(JavaScript基础)

本文用于检验学习效果,忘记知识就去文末的链接复习 1. ECMAScript介绍 ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言…

python(使用循环显示四种模式)

代码: # 模式A n int(input("请输入三角形的层数")) for i in range(1,n 1):for j in range(1,i 1):print(f"{j}\t", end" ")print()# 模式B n int(input("请输入三角形的层数")) for i in range(1,n 1):for j in rang…

点击notify里面的通知,实现路由跳转

需求描述: 右上角有出来通知用户的有代办任务的消息框,点击消息框会跳转到代办路由页面。 duration:3000//弹窗显示时间, 毫秒 getElementsByClassName() – 获取所有指定类名的元素 效果展示:

32单片机入门持续更新中

配套资料为野火霸道V2 初识 STM32 4.1 什么是 STM32 STM32,从字面上来理解,ST 是意法半导体,M 是 Microelectronics 的缩写,32 表示 32 位,合起 来理解,STM32 就是指 ST 公司开发的 32 位微控制器。在如今…

7.基础乐理-重升重降号、等音扩展篇

在 6.升降号、黑键的音名 这里知道了一个等音的概念,就是指的是同一个键,同一个音,拥有不同的名字,这些名字互相称为等音 在音乐中除了升降号,还有两个东西,一个长得像 x 叫重(chong&#xff09…

React Router 5 vs 6:使用上的主要差异与升级指南

React Router 5 的一些API 在 React Router 6 上有时可能找不到,可能会看到如下画面:export ‘useHistory’ was not found in ‘react-router-dom’ … React Router目前有两个大的版本,即React Router 5、6。React Router 6 在设计上更加简…

分布式系统接口限流方案

Git地址:https://gitee.com/deepjava/test-api-limit.git 方案一、 Guava工具包 实现单机版限流 具体代码见git 方案二、Redis lua脚本 实现分布式系统的接口限流 具体代码见git

纯css实现左右拖拽改变盒子大小

效果&#xff1a; 代码 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html;charsetutf-8"><title></title><style>body {background-color: black;color: white;}.column {ove…

Linux C柔性数组(零长数组)

零长数组&#xff0c;大小为0&#xff0c;一般用在结构体中&#xff08;网络通信&#xff0c;省流&#xff09;&#xff0c;节省空间&#xff0c;方便善后&#xff08;相对于指针类型&#xff09;&#xff0c;我们通过具体例子进行理解。 常规定长数组 #include <stdio.h&…

MongoDB的安装和使用

1.MongoDB 安装 1.1 基于Docker安装 docker run --restartalways -d --name mongo -v /opt/mongodb/data:/data/db -p 27017:27017 mongo:4.0.6 1.2 客户端工具使用 MongoDB Compass | MongoDB 2.MongoDB 使用 2.1 引用依赖包 <dependency><groupId>org.sprin…

软件无线电系列——抽取器的多相滤波和内插器的多相滤波

本节目录 一、抽取器的多相滤波结构 二、内插器的多相滤波结构 三、一个抽取器多相滤波器的设计本节内容 从前面文章中可以知道&#xff0c;抽取器模型中的低通滤波器在抽取算子D之前&#xff0c;是在降低速率之前实现的&#xff1b;内插器模型中的低通滤波器在内插算子I之后&…

DedeCMS 未授权远程命令执行漏洞分析

dedecms介绍 DedeCMS是国内专业的PHP网站内容管理系统-织梦内容管理系统&#xff0c;采用XML名字空间风格核心模板&#xff1a;模板全部使用文件形式保存&#xff0c;对用户设计模板、网站升级转移均提供很大的便利&#xff0c;健壮的模板标签为站长DIY自己的网站提供了强有力…

[数据结构]—二叉树基本概念

1.树概念及结构 1.树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#xff…

计算机网络 子网掩码与划分子网

一、实验要求与内容 1、需拓扑图和两个主机的IP配置截图。 2、设置网络A内的主机IP地址为“192.168.班内学号.2”&#xff0c;子网掩码为“255.255.255.128”&#xff0c;网关为“192.168.班内学号.1”&#xff1b;设置网络B内的主机IP地址为“192.168.班内学号100.2”&#…

【LeetCode】二叉树类题目详解

二叉树 二叉树的理论基础 二叉树是结点的度数之和不超过2的树&#xff0c;二叉树总共有五种基本形态 二叉树的种类主要有&#xff1a; 满二叉树完全二叉树 二叉树的存储方式 顺序存储链式存储 二叉树的遍历方式 先序遍历&#xff08;深度优先搜索&#xff09;中序遍历&…

css里面的浮动笔记

参考链接&#xff1a; (图文详细)最通俗易懂的CSS 浮动float属性详解_css float简单理解-CSDN博客 经验分享&#xff1a;CSS浮动(float,clear)通俗讲解 - 杨元 - 博客园 (cnblogs.com) 要点&#xff1a; 浮动元素只会影响后面标准流的元素 &#xff0c;如果在它之前有一个标…

AndroidAutomotive模块介绍(三)CarService服务

前言 上一篇文档总结 Android Automotive 框架的 APP 和 API 部分内容&#xff0c;本篇文档将会继续根据 Android Automotive 框架结构&#xff0c;总结 Framework 层 CarService 服务的内容。 本文档对 Android Automotive Framework 层服务将会按照如下顺序展开描述&#x…

学习ArkTS -- 常用组件使用

学习ArkTS 使用Deveco studio写ArkTSImage: 图片显示组件1.声明Image组件并设置图片源2. 添加图片属性 Text: 文本显示组件1. 声明Text组件并设置文本内容2. 添加文本属性 TextInput&#xff1a;文本输入框1. 声明TextInput2. 添加属性和事件 Button 组件1. 声明Button组件&…

C++矩阵库Armadillo出现warning solve() system is singular错误的解决

本文介绍使用C 语言的矩阵库Armadillo时&#xff0c;出现报错system is singular; attempting approx solution的解决方法。 在之前的文章中&#xff0c;我们介绍过Armadillo矩阵库在Visual Studio软件C环境中的配置方法&#xff08;https://blog.csdn.net/zhebushibiaoshifu/a…