FastAPI學習筆記記錄

FastAPI 學習筆記

最近在公司中需要寫接口,選取了fastapi這個框架,一個原因是FastAPI 是主流框架,同時FastAPI 有著高性能,支持異步和高并發。

FastAPI 安裝

直接用下面兩行命令進行安裝

pip3 install fastapi
pip install uvicorn

FastAPI 例子

下面將會整理我學習fastapi的一些例子,比如寫一個支持上傳文件的接口,post請求接受header中的,post請求,get請求等

  1. 上傳文件
    接收上傳的文件,需要要io.BytesIO在內存中讀取二進制數據,通常圖像,音頻都會使用io.BytesIO。
import io
from scipy.io import wavfile
from fastapi import Body, FastAPI
import uvicorn 
from fastapi.responses import StreamingResponse
from PIL import Image
from fastapi import File
from fastapi.staticfiles import StaticFilesapp = FastAPI()@app.post("/v1")
async def ttt2image(file: bytes = File(...)): # 讀取原始音頻fs, sig_ori = wavfile.read(io.BytesIO(file))sig_ori = sig_ori.astype(float)# 去直流、歸一化sig_centered = sig_ori - np.mean(sig_ori)if np.max(np.abs(sig_centered)) != 0:sig_norm = sig_centered / np.max(np.abs(sig_centered))else:sig_norm = sig_centeredimage = Image.fromarray(image)img_byte_arr = io.BytesIO()image.save(img_byte_arr, format='PNG')image_base64 = base64.b64encode(img_byte_arr.getvalue()).decode('utf-8')return {"image": image_base64}if __name__ == '__main__':uvicorn.run(app='main:app', host="0.0.0.0", port=8135, reload=True, debug=False)

在命令行輸入
uvicorn main:app --reload --port 8005 --host 0.0.0.0
其中
–reload 是實時加載更新代碼
–port 是端口號
–host 默認是127.0.0.1 即localhost,指定0.0.0.0 時是實際ip地址
可以通過postman 進行接口請求測試了

  1. post和get 示例
import io
from scipy.io import wavfile
from fastapi import Body, FastAPI
import uvicorn 
from fastapi.responses import StreamingResponse
from PIL import Image
from fastapi import File
from fastapi.staticfiles import StaticFilesapp = FastAPI()# post示例
@app.post("/v1")
async def ttt2image(file: bytes = File(...)): # 讀取原始音頻fs, sig_ori = wavfile.read(io.BytesIO(file))sig_ori = sig_ori.astype(float)image = Image.fromarray(image)img_byte_arr = io.BytesIO()image.save(img_byte_arr, format='PNG')image_base64 = base64.b64encode(img_byte_arr.getvalue()).decode('utf-8')return {"image": image_base64}@app.get("/logs")
async def logs(id: str=Query(...)):try:response = requests.get(url, params={"id": id})return response.json()except Exception as e:logger.info("message:{}".format(str(e)))return Response(content={"message": str(e)})if __name__ == '__main__':uvicorn.run(app='main:app', host="0.0.0.0", port=8135, reload=True, debug=False)
  1. 子路由
    如果接口又很多全部寫在main.py中,不放便維護整理,需要把接口寫入子路由中,main.py 直接引入就可以,方便接口管理和維護。詳細看下面的例子。
    子路由的代碼util.py
from fastapi import Body
from fastapi import Query
from fastapi import Header
from fastapi import APIRouter
from fastapi import HTTPException
from fastapi import Response
from pydantic import BaseModelrouter = APIRouter()@router.post("/add")
async def add(items: Dict = Body(None)):value1 = items["value1"]value2 = items["value2"]result = (value1 + value2)* 4return {"respose": result}

主函數main.py

import asyncio
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import uvicorn
from util import routerapp = FastAPI()# 接口前面加了api
app.include_router(router, prefix="/api")# 如果出現跨域的現象加上 下面幾行代碼
app.add_middleware(CORSMiddleware,allow_origins=["http://localhost:8005"],  # 在生產環境中應該限制具體的域名allow_credentials=True,allow_methods=["*"],allow_headers=["*"],
)async def main():config = uvicorn.Config(app,host="127.0.0.1",port=8006,log_level="info",access_log=False  )server = uvicorn.Server(config)await server.serve()if __name__ == "__main__":asyncio.run(main())# 等價于 下面的寫法
# if __name__ == '__main__':#     uvicorn.run(app='main:app', host="0.0.0.0", port=8135,  reload=True, debug=False)

以上是我最近工作中遇到的fastapi 內容,整理出來方便后續繼續更新,如果有寫的不合理的地方,歡迎指證。

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

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

相關文章

HTML(上)

1.web標準主要包括結構(Structure)、表現(Presentation)和行為(Behavior)三個方面。1.1 結構結構用于對網頁元素進行整理和分類,核心技術:HTML。 HTML (HyperText Markup Language):超文本標記語言,用于定義網頁的內容和結構&…

杭州樂灣科技有限公司的背景、產品體系與技術能力的全方位深度分析

杭州樂灣科技有限公司的背景、產品體系與技術能力的全方位深度分析 文章目錄杭州樂灣科技有限公司的背景、產品體系與技術能力的全方位深度分析**一、公司背景:智慧養老賽道領跑者****1. 基礎信息****2. 發展里程碑****二、產品體系:全域智慧養老解決方案…

kettle從入門到精通 第101課 ETL之kettle DolphinScheduler調度kettle

1、下載DolphinSchedulerDolphinScheduler官網下載安裝包,選擇合適的版本進行下載,地址為https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9/guide/installation/standalone2、啟動 DolphinScheduler Standalone Server我這里僅僅為了測試使用&…

微信小程序121~130

1.小程序功能開發-首頁功能 通過并發請求獲取首頁的數據。 // 導入封裝的網絡請求模塊實例 import http from ../utils/http // 定義接口api函數 export const reqIndexData () > {// 通過方式請求并獲取首頁數據,提升頁面渲染速度// 通過Promise.all進行并發請…

Java Stream流:高效數據處理全解析

Java Stream 流詳解 Stream 是 Java 8 引入的 API,用于高效處理集合數據(如 List、Set、Map 等)。它支持函數式編程風格,能實現復雜的查詢、過濾、映射等操作,并支持并行處理以提升性能。核心特點 非存儲數據結構&…

光子精密雙目3D線激光輪廓測量儀,擺脫視覺盲區,1臺更比2臺強!

光子精密雙目3D線激光輪廓測量儀(GL-8160D),在GL-8000系列的基礎上創新升級。GL-8160D采用全新雙目單線設計,突破傳統3D視覺檢測限制,而且不受外部拼接標定誤差影響,有效消除單目盲區,抗光干擾能…

基于Linux驅動的可見光通信方案 —— 開源 OpenVLC 平臺入門(附 BeagleBone Black 驅動簡單解析)

60 美元玩轉 Li-Fi —— 開源 OpenVLC 平臺入門(附 BeagleBone Black 及驅動解析)一、什么是 OpenVLC? OpenVLC 是由西班牙 IMDEA Networks 研究所推出的開源可見光通信(VLC / Li-Fi)研究平臺。它把硬件、驅動、協議棧…

Git系列--4.Git分支設計規范

目錄 一、了解開發環境 1.1概念闡述 1.2系統概括圖 二、設計規范之GitFlow模型 2.1具體分支概念 2.1.1master 分? 2.1.2release 分? 2.1.3develop 分? 2.1.4feature 分? 2.1.5hotfix 分? 2.2宏觀表格 三、分支流程圖 一、了解開發環境 1.1概念闡述 對于開發人員…

【時間之外】AI在農機配件設計場景的應用

目錄 農機制造業痛點 AI場景暢想 落后就要挨打 農機制造業痛點 最近,我與一位在制造業摸爬滾打多年的老友相聚。酒過三巡,話題漸漸轉到他的事業上。他興致勃勃地跟我講起,自己正主導著一個規模達幾千萬的項目,生產基地遠在孟加…

基于定制開發開源AI智能名片與S2B2C商城小程序的旅游日志創新應用研究

摘要:本文探討了旅游日志在記錄旅行美景與人物中的重要性,結合當下數字化發展趨勢,引入定制開發開源AI智能名片與S2B2C商城小程序的概念。分析如何將這兩者與旅游日志風格元素相融合,打造一種創新的旅游記錄與分享模式&#xff0c…

XGBoosting算法詳解(Boosting思想的代表算法)

文章目錄相關文章一、Boosting思想:從弱到強的串行提升二、XGBoost算法思想:GBDT的極致優化三、XGBoost數學原理:從目標函數到樹分裂3.1 目標函數定義3.2 正則化項:控制樹的復雜度3.3 泰勒二階展開:簡化目標函數3.4 化…

Vue + Element UI 實現選框聯動進而動態控制選框必填

目錄 一. 需求描述 二. 解決思路 三. 代碼實現 四. 效果展示 一. 需求描述 如下圖所示,新增人員頁面,有字段"Leader DS"和"Leader DS名稱"。 現在我要在字段"Leader DS"和"Leader DS名稱"字段下方再添加一…

高通SG882G平臺(移遠),Ubuntu22編譯:1、下載代碼

不要使用Ubuntu24,不穩定。 docker聽著美好,其實也有問題。比如你給別人的時候,虛擬機直接給過去,馬上就能用。 安裝工具 sudo apt-get install -y \ diffstat xmlstarlet texinfo chrpath gcc-aarch64-linux-gnu libarchive-d…

Android音視頻探索之旅 | C++層使用OpenGL ES實現視頻渲染

一.前言 在學習音視頻的過程中,實現視頻渲染是非常常見的,而渲染的方式也挺多,可以使用Java層的OpenGL ES進行圖形渲染,也可以使用Ffmpeg來顯示,還有就是通過C層的OpenGL ES來進行渲染。OpenGL ES是OpenGL三維圖形API…

公鏈的主要特征有哪些?

公鏈(公共區塊鏈)是指對所有人開放、無需授權即可參與的區塊鏈,其主要特征包括:- 開放性:任何人都可以自由加入網絡,參與節點運行、數據驗證或交易,無需經過中心化機構的審核。- 去中心化&#…

博途多重背景、參數實例--(二)

引用官方技術支持: 《《 博圖,怎么把DINT類型轉換成TIME,就是MCGS觸摸屏上設置時間,PLC里的定時器TIME 》》 我們把上面的實現,封裝成FC,FB塊(FB程序內調用定時器指令時的選項不…

單片機基礎

什么是嵌入式系統? 嵌入式系統通常指的是專門為某種功能設計的微型計算機系統,比如智能手表、家電控制板、汽車ECU等。 什么是嵌入式系統的IO? IO(Input/Output,輸入/輸出)就是嵌入式系統與外部世界“交…

全連接神經網絡(MLP)原理與PyTorch實現詳解

一、全連接神經網絡概述全連接神經網絡(Fully Connected Neural Network),也稱為多層感知機(Multi-Layer Perceptron, MLP),是深度學習中最基礎的神經網絡結構之一。它由多個全連接層組成,每一層的神經元與下一層的所有神經元相連接。1.1 神經…

推薦系統-數據分割、性能驗證

推薦系統基礎概念前言 作者根據開源項目 gorse 的每一步提交, 系統性學習推薦系統架構組成以及gorse中使用的推薦算法的實現。 通過參考算法文檔以及代碼實現,作者對gorse的學習過程以及進度 與 博客發布的時間線保持一致數據集分割原因 推薦系統的根本任…

從電商新手到單日變現5000+,我是如何做到閑魚爆單的

很多人想做項目賺錢,卻總是邁不出第一步。今天給大家分享一個可以從電商小白到成功跑通項目,實現單日GMV 5000的項目。今天將分享從選品、內容制作、銷售服務的全過程實戰經驗。1:閑魚實戰,強執行力01實操前的準備執行力就是你的動…