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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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实操前的准备执行力就是你的动…