Fastsapi的小疑问

news2024/11/16 13:44:40

1. Fastapi中的get和post区别是什么?

答:get参数传输暴露在外,post隐式传输

GET参数获取:获取一个URL后面带?param1=1&param2=2这种形式。

特点:URL上直接编辑传输,方便快捷,但是信息暴露在外不安全
案例:如GET代码1GET代码2

POST参数获取:需要编写客户端demo,通过demo把参数传输进去。

特点:安全可靠,但是繁琐
案例:如POST代码1

GET代码1(匹配):
匹配的模板就是:http://127.0.0.1:8080/name=值1/age=值2,对应的写法是:

from fastapi import FastAPI
import uvicorn

app = FastAPI()

@app.get("/name={n}/age={ag}")
async def server1(n, ag):
    return {
        "name": n,
        "age": ag,
    }

if __name__ == '__main__':
    uvicorn.run('main:app', port=8080, host='127.0.0.1', reload=True, proxy_headers=True)

GET代码2(访问):
访问:http://127.0.0.1:8080/get/?name=值1&age=值2,对应的写法是:

from fastapi import FastAPI, Query
import uvicorn

app = FastAPI()

@app.get("/get/")
async def server2(name=Query(None), age=Query(None)):
    return {
        "name": name,
        "age": age,
    }

if __name__ == '__main__':
    uvicorn.run('main:app', port=8080, host='127.0.0.1', reload=True, proxy_headers=True)

注意:这Query(None)自动解析URL,使对应参数进行匹配,如果没有匹配,使用默认值None,更多使用说明参考官方Fastapi官网

POST代码1
服务端完整demo

# -*- coding: utf-8 -*-
# author:laidefa

# 载入包
import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel

# 创建数据模型
class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

app = FastAPI()

@app.get("/")
async  def root():
    return 'Hello World!'


@app.post("/bianbian")
async def fcao_predict(item: Item):
    item_dict = item.dict()
    if item.tax:
        price_with_tax = item.price + item.tax
        item_dict.update({"price_with_tax": price_with_tax})
        return item_dict


if __name__ == '__main__':
    uvicorn.run('main:app', port=8080, host='127.0.0.1', reload=True, proxy_headers=True)

客户端demo

# -*- coding: utf-8 -*-
# author:laidefa

# 载入包
import requests
import json
import time

params={
    "name": "bianbian",
    "description": "An optional description",
    "price": 999,
    "tax": 3.5
}

url='http://127.0.0.1:8080/bianbian'
time1=time.time()
html = requests.post(url, json.dumps(params))
print('发送post数据请求成功!')
print('返回post结果如下:')
print(html.text)

time2=time.time()
print('总共耗时:' + str(time2 - time1) + 's')

客户端测试输出
在这里插入图片描述

注意:GET和POST都可以通过http://127.0.0.1:8080/docs进行访问,在线上传数据,如下图。
在这里插入图片描述

2.Fastapi临时上传数据到Docker容器内的模板

import os, io, json, time
import uvicorn
import soundfile as sf
from fastapi import FastAPI, File,UploadFile
from paddlespeech.cli.asr.infer import ASRExecutor
app = FastAPI()
# 在运行的环境中创建文件夹,用于临时存放上传的文件
dir_list = ["static", "static/langid"]
for s_dir in dir_list:
    if not os.path.exists(s_dir):
        os.mkdir(s_dir)

# 使用完文件之后,清理当时暂存在内部的上传文件
def clear_wav(dir_base="/code"):
    for fname in os.listdir(dir_base):
        if fname.endswith('.wav'):
            os.remove("/code/" + fname)

@app.post("/bianbian/")
async def create_file(file: UploadFile = File(...)):
        # 读取数据
        f_up = await file.read()
        data, samplerate = sf.read(file=io.BytesIO(f_up), dtype='float32')
        fname = str(time.time()).replace('.', '')
        cur_fpath = os.path.join(dir_list[1], fname + '.wav')
        # Docker容器内部保存数据
        sf.write(cur_fpath, data, samplerate)
        asr = ASRExecutor()
        # 代码临时调用Docker容器内的临时数据进行使用
        result = asr(audio_file=cur_fpath)
        # 清除Docker容器内部的临时数据
        clear_wav(dir_list[1])

        return json.dumps({"code": 200, "msg": "识别成功!", "result": result}, ensure_ascii=False)

if __name__ == '__main__':
    uvicorn.run('main:app', port=8080, host='0.0.0.0', reload=True, proxy_headers=True)

参考:
https://www.iotword.com/2888.html
路径参数获取与GET、POST参数获取
GET和POST请求参数接收以及验证
https://www.freesion.com/article/3542679645/
https://blog.csdn.net/u013421629/article/details/104892975

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【nowcoder】笔试强训Day16

目录 一、选择题 二、编程题 2.1扑克牌大小 2.2完全数计算 一、选择题 1.在关系型是数据库中,有两个不同的事务同时操作数据库中同一表的同一行,不会引起冲突的是: A. 其中一个DELETE操作,一个是SELECT操作 B. 其中两个都是…

植物大战僵尸:代码实现无限阳光

通过逆向分析植物阳光数量的动态地址找到阳光的基址与偏移,从而实现每次启动游戏都能够使用基址加偏移的方式定位阳光数据,最后我们将通过使用C语言编写通用辅助实现简单的无限阳光辅助,在教程开始之前我们先来说一下为什么会有动态地址与基址…

光缆单盘检测与光缆线路测试需使用双窗口吗?

1 引言 光缆线路和宽带接入工程中,通常会涉及光缆单盘检测与光缆线路的测试工作,光缆线路测试包括:中继段测试、用户光缆测试等。这些测试条目,有的只需采用测试仪表的1个波长进行测试,即单窗口测试,有的则…

代码随想录算法训练营第2天 977. 有序数组的平方、209. 长度最小的子数组

代码随想录算法训练营第2天| 977. 有序数组的平方、209. 长度最小的子数组 有序数组的平方 力扣题目链接(opens new window) 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 数组其实是有…

C 语法--编译相关

1, 单下划线和双下划线 #pragma #pragma 用于指示编译器完成一些特定的动作。#pragma 所定义的很多指示字是编译器特有的,在不同的编译器间是不可移植的 #pragma section APP_VERSION //__far const unsigned long version 0x01010101; __far const un…

redis缓存淘汰策略-基于LinkedHashMap实现LRU算法

redis缓存淘汰策略-LRU算法(最近最少使用) LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法, 选择最近最久未使用的数据予以淘汰。 1,所谓缓存, 必须要有读写两个操作…

【叨叨与总结】2022年总结

如果我记得没错,这个记录时间的软件应该是在6月份或者7月份才开始用的,大概记录的时间有半年。个人觉得还是不错的,下面还是简单的总结一下。   首先睡眠时长是有一定保障的,甚至有好多时候还睡了9、10个小时,当然这…

【Python基础】模块化编程-包调用

datitle: Python Module&&Invoking date: 2020-05-12 00:16:58 img: https://gitee.com/github-25970295/blogImage/raw/master/img/woman-3219507__340.webp categories: 编程语言 reprintPolicy: cc_by cover: false tags: python ​ 无论我们选择用何种语言进行程序…

2022年度总结:凝神聚力 踔厉奋发

2021年底手里握了几份offer,有研究型大学,也有教学型大学。是选择去前者继续拼搏,还是选择去后者直接躺平?二者的权衡和取舍确实不太容易抉择。尽管也咨询了很多前辈,最后还是得自己做决定。尽管我还是很喜欢做研究工作…

spark理论

前言: 本文是之前19年学生时学习林子雨老师《Spark大数据 》网易公开课的中关于spark的理论部分的部分笔记。主要包括大数据产品与spark的一些概念与运行原理介绍。 目录 大数据产品与hadoop生态系统 Spark概念 MapReduce与spark的比较 Spark运行 Spark运行基本流程…

【Spring 系列】Spring Session 深度解析

文章目录Spring Session 架构及应用场景为什么要spring-sessionSR340规范与spring-session的透明继承Spring Session探索特点核心 APIservlet session 与 spring-session 关系webflux 与 spring session 的关系基于 Servlet 的 Spring Session 实现思考题背景1、注册到 Filter …

Pytorch—模型微调(fine-tune)

随着深度学习的发展,在大模型的训练上都是在一些较大数据集上进行训练的,比如Imagenet-1k,Imagenet-11k,甚至是ImageNet-21k等。但我们在实际应用中,我们自己的数据集可能比较小,只有几千张照片,这时从头训…

RHCE——ansible环境配置(1)

配置ansible学习环境实现以下要求: 1.控制主机和受控主机通过root用户通过免密验证方式远程控住受控主机实施对应(普通命令,特权命令)任务 2.控制主机连接受控主机通过普通用户以免密验证远程控住受控主机实施指定(普通…

雪花算法详解

背景 需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。 数据库的扩展方式主要包括:业务分库、主从复制,数据库分表。 数据库分表 将不同业务数据分散存储到不同的数据库服务器,能够支撑百万甚至千万…

计算机网络学习笔记

前言 本篇笔记方便本人用于复习回顾知识点,内容庞杂,见谅。含有目录方便大家跳转复习! 此复习笔记总结于 湖科大教书匠出品:深入浅出计算机网络 微课视频 此笔记尚未完结,持续更新中… 文章目录前言第一章 概述1.1 …

数学建模学习笔记-概况

目录 1概况. 数学建模: 数学建模的模块: 一般步骤: 全过程: 论文的基本流程 模块学习: 1.题目备战:掌握固定模式 2.摘要备战:总结归纳能力,通过看高水平论文掌握。 3.问题重…

Mybatis源码分析(五)SqlSession的创建

目录一 SqlSession的创建1.1 获取environments配置元素1.2 获取事务工厂1.3 获取执行器Executor1.4 构建DefaultSqlSession官网:mybatis – MyBatis 3 | 简介 参考书籍:《通用源码阅读指导书:MyBatis源码详解》 易哥 参考文章: M…

彩色图像灰度化

灰度图像能以较少的数据表征图像的大部分特征,因此在某些算法的预处理阶段需要进行彩色图像灰度化,以提高算法的效率。将彩色图像转化为灰度图像的过程称为彩色图像灰度化。 常用RGB图像灰度化,在RGB模型中,位于空间位置(x,y)的像…

MAX78000一些AI例程测试

进入Demo所在目录 cd /E/MAX78000/MAXSDK/Examples/MAX78000/CNN/kws20_demo 执行编译 make 如果之前已经被编译过了,可以先清除,再make make distclean 选择板型 根据自己用的开发板不一样,注释掉BOARDEvKit_V1 To compile code for …

视频处理系列︱利用达摩院ModelScope进行视频人物分割+背景切换(一)

做了一个简单的实验,利用modelscope的人像抠图模型对视频流进行抠像并更换背景。 文章目录1 视频人像抠图(Video human matting)2 更换背景1 视频人像抠图(Video human matting) 地址链接:视频人像抠图模型…