FastAPI之嵌套模型

請求體 - 嵌套模型

使用 FastAPI,你可以很隨意的實現模型的嵌套、定義、校驗、記錄文檔,并使用任意深度嵌套的模型,這其實都是FastAPI的核心模塊P一單提成進行做的。。

List 字段

from fastapi import FastAPI
from pydantic import BaseModelapp = FastAPI()class Item(BaseModel):name: strdescription: str | None = Noneprice: floattax: float | None = Nonetags: list = []@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item):results = {"item_id": item_id, "item": item}return results

我們來看下效果
在這里插入圖片描述

在這里插入圖片描述

現在tags,可以隨便填寫任意類型的數據,如果我們規定只能填寫字符串,只需要稍微改變一下代碼

tags: List[str] = []

現在來看下效果
在這里插入圖片描述

Set 類型

set 類型與list的區別我們都知道,就是數據不能重復。改起來也是相當的容易,直接把List換成Set即可

tags: set[str] = set()

這樣,即使你收到帶有重復數據的請求,這些數據也會被轉換為一組唯一項。

而且,每當你輸出該數據時,即使源數據有重復,它們也將作為一組唯一項輸出。

嵌套模型

直接來看一個深度較大的嵌套代碼示例吧

from typing import Unionfrom fastapi import FastAPI
from pydantic import BaseModel, HttpUrlapp = FastAPI()class Team(BaseModel):# 球隊名稱name: str# 所屬區域:東部、西部area: strclass Player(BaseModel):# 所屬球隊team: Team# 球員名稱name: strclass Hobby(BaseModel):name: strdescription: Union[str, None] = None# 分類category: strtax: Union[float, None] = None# 喜歡的球隊名稱teams: set[str] = set()# 喜歡的球員players: Union[list[Player], None] = Noneclass Fan(BaseModel):"""球迷"""# 球迷姓名name: strdescription: Union[str, None] = None# 年齡age: int# 愛好hobby: list[Hobby]@app.post("/fan/")
async def create_fan(fan: Fan):return fan

看看效果
在這里插入圖片描述

純列表請求體

官網的示例代碼

from fastapi import FastAPI
from pydantic import BaseModel, HttpUrlapp = FastAPI()class Image(BaseModel):url: HttpUrlname: str@app.post("/images/multiple/")
async def create_multiple_images(images: list[Image]):return images

在這里插入圖片描述

總結

總結一下,FastAPI通過利用Python類型提示和Pydantic庫的強大功能,使得處理嵌套模型變得簡單易用。只需要定義好你的數據模型,FastAPI就能自動處理請求體的解析和驗證,大大提高了開發效率。而實際上,在工作中 ,用到這種寫法并不多。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210626.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210626.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210626.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于JavaWeb+SSM+Vue童裝商城小程序系統的設計和實現

基于JavaWebSSMVue童裝商城小程序系統的設計和實現 源碼獲取入口Lun文目錄前言主要技術系統設計功能截圖訂閱經典源碼專欄Java項目精品實戰案例《500套》 源碼獲取 源碼獲取入口 Lun文目錄 目 錄 摘 要 III Abstract 1 1 系統概述 2 1.1 概述 3 1.2課題意義 4 1.3 主要內容 5…

BearPi Std 板從入門到放棄 - 先天篇(1)(階段 : 智慧城市 - 智慧路燈)

簡介 對前面幾篇整合, 做個小小匯總試驗, 使用BearPi E53_SC1擴展板主芯片: STM32L431RCT6串口: Usart1擴展板與主板連接: I2C : I2C1 (光照強度傳感器:BH1750)LED: PB9步驟 創建項目 參考 BearPi Std 板從入門到放棄 - 引氣入體篇(1)(由零創…

【測試人生】數據同步和遷移的變更注意事項

數據同步或者遷移操作也算是線上數據變更的一種類型。由于涉及的數據量非常大,一旦發生故障,會直接影響線上業務,并且較難止損。從變更風險管控的角度考慮,數據同步或遷移操作也需要走合理的發布窗口,并且在操作前也需…

淺談Google Play ASO 優化

什么是ASO ASO即APP Store Optimization,是用于提高APP在應用市場排名的工具,其實也就是移動產品的SEO工作。 ASO是為了提高該產品的搜索結果成績,提升APP的下載量,針對Google Play來說,ASO就是優化APP頁面。 為什么…

Linux升級nginx版本

處于漏洞修復目的服務器所用nginx是1.16.0版本掃出來存在安全隱患,需要我們升級到1.17.7以上。 一般nginx默認在 /usr/local/ 目錄,這里我的nginx是自定義的路徑安裝在 /app/weblogic/nginx 。 1.查看生產環境nginx版本 cd /app/weblogic/nginx/sbin/…

Redis基礎入門

第1章:引言 大家好!我是小黑,今天咱們來聊聊Redis。Redis,這個名字你可能在不少地方聽過,尤其是在后端開發領域,它可是個大名鼎鼎的角色。,Redis是一個開源的內存中數據結構存儲系統&#xff0…

放棄原生SQL:Python中更優雅的數據庫操作

概要 在Python中,通過原生SQL語句進行數據庫操作是一種傳統的方式,但現代的Python開發中,使用ORM(Object-Relational Mapping)工具和數據庫連接庫可以更加高效和優雅地進行增刪改查操作。本文將詳細介紹Python中放棄原…

解決IDEA中多個項目不在同一窗口下顯示的問題和添加新的git的URL

以上是添加顯示多個項目 以下是給新添加的項目添加git

LeetCode算法題解(單調棧)|LeetCode84. 柱狀圖中最大的矩形

一、LeetCode84. 柱狀圖中最大的矩形 題目鏈接:84. 柱狀圖中最大的矩形 題目描述: 給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。 求在該柱狀圖中,能夠勾勒出來的矩形的最大…

做外貿很多時候還是要學會隨機應變

馬上又要到年底了,相信已經有一部分小伙伴開啟了催單模式,希望客戶盡量在春節前將訂單落實下來,自然也有很多客戶會在春節前的這一段時間開始陸續拜訪自己觀望了很久的工廠。 其實對于貿易公司來說,對于來看工廠的客戶&#xff0…

ChatGPT,作為一種強大的自然語言處理模型,具備顯著優勢,能夠幫助您在各個領域取得突破

2023年隨著OpenAI開發者大會的召開,最重磅更新當屬GPTs,多模態API,未來自定義專屬的GPT。微軟創始人比爾蓋茨稱ChatGPT的出現有著重大歷史意義,不亞于互聯網和個人電腦的問世。360創始人周鴻祎認為未來各行各業如果不能搭上這班車…

Kotlin 作用域函數:理解 apply, let, 和 with

Kotlin提供了幾個作用域函數來優化和簡化代碼的結構。 本文將對比分析 apply, let, 和 with 三個函數。 一、對比分析: apply:在其接收者的上下文中執行代碼塊,并返回接收者對象。let:在其接收者的上下文中執行代碼塊&#xff…

Kotlin:內置函數let、also、with、run、apply

前言 在Kotlin中,有一些用于擴展 & 方便開發者編碼的內置函數,能大大提高開發者的開發效率。今天,我將主要講解的是: let函數also函數with函數run函數apply函數 基礎知識:接口回調中Lambda使用 在Kotlin中可使用…

棧和隊列的互相實現

用隊列實現棧 OJ鏈接 請你僅使用兩個隊列實現一個后入先出(LIFO)的棧,并支持普通棧的全部四種操作(push、top、pop 和 empty)。 實現 MyStack 類: void push(int x) 將元素 x 壓入棧頂。int pop() 移除并返…

Mybatis XML增刪操作(結合上文)

先來"增"操作 在UserInfoXMLMapper.xml里面寫 <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <…

nginx多端口部署

1.配置nginx.conf文件 有幾個端口需要部署就寫幾個server&#xff0c;我這里只部署了兩個端口分別為80和81端口&#xff0c;所以有兩個server文件。80端口項目入口在根目錄的test文件中&#xff0c;81端口項目入口在根目錄的test1文件夾中。 2.準備項目文件html文件 在/test1…

Dockerfile部署Java項目掛載使用外部配置文件

Dockerfile部署Java項目掛載使用外部配置文件 技術博客 http://idea.coderyj.com/ 需求是由于java項目使用的是nacos 而且每次部署nacos服務器ip不一樣導致要重新打包,想引入外部配置文件進行打包 1.需求是由于java項目使用的是nacos 而且每次部署nacos服務器ip不一樣導致要重新…

數據結構和算法專題---5、調度算法與應用

本章我們會對調度算法做個簡單介紹&#xff0c;包括常用的調度算法&#xff08;FCFS、SJF、RR、HPF&#xff09;的概述、實現方式、典型場景做個說明。 什么是調度算法 調度算法常見于操作系統中&#xff0c;因為系統資源有限&#xff0c;當有多個進程&#xff08;或多個進程…

Oracle 怎樣修改DB_NAME

DBNEWID 是一個數據庫實用程序&#xff0c;用于更改 Oracle 數據庫的 DBNAME 和 DBID。可以更改 DBID 或 DBNAME 或兩者。 DBNAME 是在創建數據庫時指定的數據庫名稱&#xff0c;DBID 是創建數據庫時分配給數據庫的唯一編號。 以下步驟演示如何使用 DBNEWID 實用程序更改 Oracl…

【論文閱讀筆記】序列數據的數據增強方法綜述

【論文閱讀筆記】序列數據的數據增強方法綜述 摘要 這篇論文探討了在深度學習模型中由于對精度的要求不斷提高導致模型框架結構變得更加復雜和深層的趨勢。隨著模型參數量的增加&#xff0c;訓練模型需要更多的數據&#xff0c;但人工標注數據的成本高昂&#xff0c;且由于客觀…