Python - FastAPI 实现 get、post 请求

news2024/11/24 17:57:09

目录

一.引言

二.FastAPI Server 构建

1.get - read_items

2.post - create_item

3.uvicorn - run_app

三.Postman 请求

1.post - create_item

2.get - read_items

四.Requests 请求

1.post - create_item

2.get - read_items

五.总结


一.引言

前面介绍了 LLM 的相关知识,从样本加载、模型加载到后面的模型训练与模型推理,我们经历的完整的 LLM LoRA 微调与推理流程。基于前面的预训练模型,我们尝试使用 FastAPI 构建接口服务,本文主要介绍最基本的 FastAPI get、post 用法,后续介绍完整的 server 部署。

二.FastAPI Server 构建

下面我们构建一个 API 服务,共包含两个方法:

read_items - 将 items 数组的元素打印出来

create_item - 向 items 数组添加一个元素

1.get - read_items

get 方法是 HTTP 请求的一种类型,通常用语从服务器获取数据。由于 read_items 方法是从服务器获取 items 数组,所以其对应 get 请求。get 请求通常没有请求体,所有参数都放在 URL 的查询字符串中,所以存在一定的安全性问题。

# -*- coding: utf-8 -*-
from fastapi import FastAPI, Form

app = FastAPI()

# 示例数据
items = []


# GET 请求
@app.get("/items")
async def read_items():
    return items

2.post - create_item

post 方法是区别于 get 的另一种 HTTP 请求类型,通常用于向服务器发送数据。post 通常包含一个请求体,传输的参数不需要通过 '?' 显式的体现在请求的 URL 中,而是可以通过 JSON 对象传递,相对 get 方法更加安全。与 get 相比,post 操作不是幂等的,其每次执行完可能得到不同的结果,而 get 操作则通常认为是幂等的,这意味着多次执行 get 得到的结果应该是相同的。

# POST 请求
@app.post("/items")
async def create_item(item: str = Form(None)):
    items.append(item)
    return {"message": "Item created successfully: {}".format(str(item))}

这里 Post 请求成功后会有成功的提示并打印成功添加的 item。

3.uvicorn - run_app

uvicorn.run(app, host="192.XXX.XXX", port=8001) 方法是 uvicorn 的命令行接口。其中,app 是你想要运行的应用对象,对应我们上面的 FastAPI 的 get 与 post 对应的方法,host 和 port 则是服务将要监听的 IP 地址和端口。该方法会启动一个 ASGI 服务器,以指定的 host 和 port 为你的应用提供服务。后续的 HTTP 请求的 URL 也是基于上面的 host 和 port 组成。下面我们在本机起一个 FastAPI 服务。

if __name__ == '__main__':
    import uvicorn

    uvicorn.run(app, host='0.0.0.0', port=7788)

运行主函数后出现如下提示代表 Server 启动成功,我们后续对应的 HTTP 请求 URL 为图中蓝色链接 http://0.0.0.0:7788: 

三.Postman 请求

针对上面构建的 HTTP 服务,我们可以通过显示的 App 例如 postman 进行 get 和 post 请求。

1.post - create_item

打开 postman 选择 POST 命令,输入对应的 URL + 函数对应的路径,上面 get 和 post 请求对应的路径都是 URL + items,在对应 form-data 处传递要添加的 item,注意这里 key 要和函数定义的参数名称完全对应,否则会报错。执行 send 按钮发送 Http 请求,从返回的 Body 中我们看到成功添加 python 到 items 列表中。后面我们修改 value 为 'java' 和 'c++' 并依次发送 post 指令。

server 端也要每次请求的具体信息,status_code == 200 代表请求成功。

2.get - read_items

将请求模式切换为 GET,由于 get 命令未传参数,所以直接输入对应地址 Send 发送请求即可。返回的结果中包含我们上面添加的三个元素:python、java、c++。server 端也增加对应的 get 请求日志:

四.Requests 请求

上面 Postman 采用显式的页面方式向 server 发送 HTTP 请求并获取结果,更常规的做法是通过 requests 库使用代码发送请求并处理返回结果。

1.post - create_item

def post(text):
    url = 'http://0.0.0.0:7788/items'

    # 构建请求数据
    data = {
        'item': text
    }

    # 发送 post 请求
    response = requests.post(url=url, data=data, timeout=10)

    # 检查响应状态
    if response.status_code == 200:
        print('请求成功')
        print(response.json())
    else:
        print('请求失败,状态码:', response.status_code)

requests.post 添加对应 url 与 data,data 为 map 形式,其中要包含 post 函数对应的 key,结尾处会根据 status_code 判断请求是否成功。从 server 日志可以看出这一次 create_item 也执行成功了:

2.get - read_items

def get():
    url = 'http://0.0.0.0:7788/items'
    response = requests.get(url)

    if response.status_code == 200:
        data = response.json()
        print('成功获取,返回:', data)
    else:
        print('请求失败,状态码:', response.status_code)

requests.get 直接传入对应 url 即可获取对应信息:

server 端如下日志代表本次 get 请求成功: 

五.总结

上面介绍了如何使用 FastAPI 搭建简单的 Server Demo,后续基于该方法构建 LLM Server。

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

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

相关文章

前端解决页面访问总是自动弹出 浏览器的 翻译此页 问题

今天克隆了一个项目下来 结果 浏览器自带的 翻译此页总会默认弹出 还一直以为是js设置的 结果最后才发现 这是个基础设置 在于 html标签的 lang 属性 这里设置了 en 他就会每次启动都弹出来 只需要改成langzh-CN 再次运行 就不会在弹出来了

恒合仓库 - 商品管理模块、上传照片、添加采购单、添加出库单、商品分类

商品管理模块 文章目录 商品管理模块一、分页查询商品1.1 实体类1.1.1 Store 仓库1.1.2 Brand 品牌1.1.3 ProductType 商品分类1.1.4 Supply 供应商1.1.5 Place 产地1.1.6 Unit 单位1.1.7 Product 商品 1.2 查询所有仓库1.2.1 Mapper1.2.2 Service1.2.3 Controller1.2.4 效果图…

基于宏基因组的功能挖掘:碳水化合物活性酶(CAZymes)注释

基于宏基因组数据,可以通过NR数据库进行物种注释,还可以进行功能挖掘,比如通过KEGG数据库来挖掘代谢通路、根据COG注释结果对蛋白进行功能归类,通过CAzyme可以得到碳化合物合成、代谢、转运等酶的分类和相关信息,通过P…

Echarts散点图筛选新玩法dataZoom

目录 前言 一、引入Echarts5.4.3 二、新建index.html 三、绑定Echarts展示元素 四、初始数据绑定 五、option设置 六、效果展示 七、参数说明 总结 前言 如果您在日常的工作当中也会遇到如下场景,需要在线对已经展示出来的图表进行进一步的筛选&#xff0c…

ASL集睿致远代理商,CS5366芯片,typec转HDMI 4k60Hz带PD快充方案

CS5366是一款Type-C/DP1.4到HDMI2.0的显示协议转换芯片&#xff0c;内部集成了PD3.0及DSC decoder, 并能按客户需求配置成不同的功能组合&#xff0c; 是目前集成度与功耗最小的一颗芯片。 CS536x主要特性 1. 业界最低功耗的Type-C to HDMI2.0 4K60产品 (<300mW)。 2. 集成D…

R读写parquet文件

什么是parquet文件 Apache Parquet是一个开源的&#xff0c;列存储的数据文件格式。 https://parquet.apache.org/ 在R里面&#xff0c;我们可以通过arrow包来读写它。 我们先安装一下arrow包&#xff0c;并加载它。 install.packages("arrow") library(arrow)读写…

[CISCN2019 华东南赛区]Web11 SSTI

这道SSTI 差点给我渗透的感觉了 全是API 我还想去访问API看看 发现这里读取了我们的ip 我们抓包看看是如何做到的 没有东西 我们看看还有什么提示 欸 那我们可不可以直接修改参数呢 我们传递看看 发现成功了 是受控的 这里我就开始没有思路了 于是看了wp 说是ssti 那我们看…

buuctf-[WUSTCTF2020]朴实无华

打开环境就这么一句话 先打开index.php,但是没有什么 查看了下网络 看到gzip和php 我试了试www.zip 还有index.phps&#xff0c;也是一样的&#xff0c;都没找到文件 于是我想到用御剑扫&#xff0c;但是我好像线程太长了&#xff0c;一个没扫到&#xff0c;我就想到用dirsea…

阿里云ACE认证的含金量高吗?如何通过ACE认证考试?

在当今的社会中&#xff0c;想要获得一份好工作、得到丰厚的报酬&#xff0c;唯一的方法就是证明自己优秀&#xff0c;能给公司创造价值&#xff0c;是大多数公司想要看到的。 那么在面试过程中&#xff0c;怎么样才能让面试官一眼就记住呢&#xff1f;那一定是有一份足够优秀…

c语言基础知识+OS+数据结构

c语言&#xff1a; memory section&#xff1a; .bss .data .text C语言编译流程&#xff1a; pre-compiler: compiler: 检查语法问题 link: 将symbol转化为实际函数/变量地址&#xff0c;map file里面可以看到 预编译在做什么&#xff1a; &#xff08;#define&#x…

Unity3D C# 反射与特性的配合使用

需求分析 情况&#xff1a; 假如我们是一个动物园的管理员&#xff0c;我们需要统计园内的所有动物和动物的行为。 举例&#xff1a; 现在园区内有猫、狗和鸡。猫对应的行为是喵喵喵和卖萌&#xff0c;狗对应狗吠和干饭&#xff0c;鸡对应篮球和打鸣那么这时候我要统计这些&a…

【开发】视频监控系统/视频汇聚平台EasyCVR平台页面展示优化

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

怎么绘制骑鹅旅行记思维导图?教你这样绘制

怎么绘制骑鹅旅行记思维导图&#xff1f;骑鹅旅行记是一本经典的童话故事&#xff0c;绘制这个故事的思维导图可以帮助我们更好地理解故事情节和角色关系。那么今天就给大家介绍一种快速且简便的方法来绘制思维导图。 我们可以使用【迅捷画图】来进行制作&#xff0c;这是一种功…

深度学习笔记之优化算法(一)铺垫:梯度下降法VS最速下降法

深度学习笔记之优化算法——铺垫&#xff1a;梯度下降法VS最速下降法 引言回顾&#xff1a;条件数范数 相关描述关于梯度下降法最速下降法单位范数的描述 梯度下降法VS最速下降法梯度下降法等价于最速下降法的情况欧式范数约束产生的更新方向可能不是最优方向梯度下降法与最速下…

RayViz 一款服务于SolidWorks用于光学和机械设计的有效工具

RayViz 作为 SolidWorks 的一个扩展插件&#xff0c;不仅可以在 SolidWorks 工作环境中直接定义和保存模型光学属性&#xff0c; 而且还可以在该 CAD 工作环境中直接进行光线追迹。通过 RayViz, 把 TracePro 和 Solidworks 链接了起来&#xff0c; 一个模型可以在 TracePro 中用…

14.抽象工厂模式

UML 代码 #include <iostream> #include <list> using namespace std;class AbstractProductA { public:virtual void showa() 0; }; class ProductA1:public AbstractProductA { public:virtual void showa(){cout << "我是A1" << endl;}…

OpenHarmony Meetup常州站招募令

OpenHarmony Meetup 常州站正火热招募中&#xff01; 诚邀充满激情的开发者参与线下盛会~ 探索OpenHarmony前沿科技&#xff0c;畅谈未来前景&#xff0c; 感受OpenHarmony生态构建之路的魅力&#xff01; 线下参与&#xff0c;名额有限&#xff0c;仅限20位幸运者&#xff01…

【c++_containers】string的模拟实现

前言 在学习数据结构时&#xff0c;如何证明自己彻底掌握了一个容器的各种特性&#xff1f;最直接的办法就是自己写一个。下面我们将围绕下图展开对与string的深度了解&#xff1a; 一.string的成员变量 string是表示字符序列的对象&#xff0c;同时增加了专门用于操作单字节字…

2023Node.js零基础教程(小白友好型),nodejs新手到高手,(一)NodeJS入门

写在开始前 在无尽的代码汪洪中&#xff0c;闪耀着一抹绚丽的光芒。它叫做Web前端开发&#xff01; HTML是我们的魔法笔&#xff0c;是创造力的源泉。它将我们的思绪化为标签&#xff0c;将我们的想象变为元素。 在无尽的标签组合中&#xff0c;我们创造出独特的网页&#xff…

分享:大模型定向培养学徒来啦

模型定向培养学徒招募对象&#xff1a; 1.在读研究生学硕专硕均可 2.大数据、人工智能、统计学计算机、软件、数学等相关研究方向 3.具备Python编程基础机器学习基础 4.有深度学习自然语言处理基础优先 大模型定向培养学徒目标&#xff1a; 1.培养大模型prompt能力&#…