编写fastapi接口服务

news2025/2/6 23:54:07

FastAPI是一个基于 Python 的后端框架,该框架鼓励使用 Pydantic 和 OpenAPI (以前称为 Swagger) 进行文档编制,使用 Docker 进行快速开发和部署以及基于 Starlette 框架进行的简单测试。

step1:安装必要库

pip install fastapi uvicorn

step2:构建代码

创建main.py脚本文件,然后引入FastAPI模块,就可以构建接口了

from fastapi import FastAPI, Query
 
app = FastAPI()
 
@app.post("/路由")
def hello():
    return {"Hello": "World"}
 
@app.post('/路由')
async def function(
        try:
            *
        except:
            *
return {'Hello': World}

这只是一个简单示例,也可以用get等替换post

step3:运行接口

和其他的模块不一样的是,FastAPI需要运行指定命令来运行api服务:

需要在当前目录下执行下面的命令,他会主动去找到main入口:

uvicorn main:app --reload

step4:更多指南

欢迎参考官网:https://fastapi.tiangolo.com/

Other:自己写了个接口 

是GitHub上一个开源的给图片添加盲水印的项目blind_watermark

from fastapi import FastAPI
from fastapi.responses import FileResponse
import subprocess
from fastapi.middleware.cors import CORSMiddleware
from fastapi import Form
from blind_watermark.blind_watermark import WaterMark

app = FastAPI()

# 后台api允许跨域
app.add_middleware(
    CORSMiddleware,
    allow_origins='*',
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)
@app.post("/embed")
async def embed_watermark(pwd: int = Form(), image_path: str = Form(), watermark_text: str = Form(), output_path: str = Form()):
    try:
        subprocess.run(["blind_watermark", "--embed", image_path, watermark_text, output_path])
        # return FileResponse(output_path, filename="embedded.png")
        bwm1 = WaterMark()
        bwm1.read_img(image_path)
        bwm1.read_wm(watermark_text,mode='str')
        bwm1.embed(output_path)
        watermark_size = len(bwm1.wm_bit)

        return {"image": FileResponse(output_path, filename="embedded.png"), "watermark_size": watermark_size}
    except Exception as e:
        return {"error": str(e)}


@app.post("/extract")
async def extract_watermark(pwd: int = Form(), wm_shape: int = Form(), image_path: str = Form()):
    try:
        subprocess.run(["blind_watermark", "--extract", "--pwd", str(pwd), "--wm_shape", str(wm_shape), image_path])
        bwm1 = WaterMark(password_img=int(pwd))
        wm_str = bwm1.extract(filename=image_path, wm_shape=wm_shape, mode='str')
        return {"success": "Watermark extracted successfully.",'watermark is:':wm_str}
    except Exception as e:
        return {"error": str(e)}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8886)

解释一下

extract也是同理,需要调用哪些功能,就在这里添加,然后return返回的内容就是用调用工具,比如postman调用后显示的内容


postman界面调用信息:

如果我的代码有不妥的地方,欢迎指正

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

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

相关文章

解决Pycharm pip安装模块太慢问题,pycharm2022没有manage repositories配置镜像源

解决方案 方法清华阿里云中国科技大学华中理工大学 方法 URL写下面任意一个 清华 https://pypi.tuna.tsinghua.edu.cn/simple阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/华中理工大学 http://pypi.hustunique.c…

数字化时代的探索:学生为何对数据可视化趋之若鹜?

随着信息时代的迅猛发展,数据已经成为我们生活中不可或缺的一部分。而在这个数字化浪潮中,越来越多的学生开始关注数据可视化,这并非偶然。下面,我就从可视化从业者的角度出发,简单聊聊为什么越来越多的学生开始关注数…

边缘计算云边端全览—边缘计算系统设计与实践【文末送书-10】

文章目录 一.边缘计算1.1边缘计算的典型应用 二.边缘计算 VS 云计算三.边缘计算系统设计与实践【文末送书-10】3.1 粉丝福利:文末推荐与福利免费包邮送书! 一.边缘计算 边缘计算是指在靠近物或数据源头的一侧,采用网络、计算、存储、应用核心…

探索 WebRTC:数字世界的实时通信魔法

前言 在当今日常生活中,我们期望能够随时随地与朋友、同事或家人进行实时沟通。WebRTC(Web实时通信)技术就像一种魔法,让这些交流变得无比便捷,而且完全在浏览器中实现,无需下载任何额外应用或插件。 Web…

基于时钟序列解决时钟回拨

一、背景 分布式 ID 生成算法用于在分布式系统中生成全局唯一的 ID 标识,而 twitter 提出的雪花算法便是其中一种知名的算法,其每次会生成一个 64 位的全局唯一整数,算法的基本思想非常巧妙: 二进制64位长整型数字:1…

PostgreSQL 可观测性最佳实践

简介 软件简述 PostgreSQL 是一种开源的关系型数据库管理系统 (RDBMS),它提供了许多可观测性选项,以确保数据库的稳定性和可靠性。 可观测性 可观测性(Observability)是指对数据库状态和操作进行监控和记录,以便在…

哪些超声波清洗机的清洁力比较好?清洁力好的超声波清洗机推荐

超声波清洗机在我们日常生活中是越来越常见,它以强大的清洁力获得大众的青睐!毕竟家里购入一款超声波清洗机还是一件非常方便的事情,免去了跑去眼镜店洗眼镜麻烦,免去了清洗一些耳钉、化妆刷这些小物件难清洁烦恼!现在…

如何进行快照管理

目录 快照管理 手动创建快照 自动创建快照 快照管理 快照管理 传统的物理服务器,为了确保服务器中数据的安全,需要你自行定制备份策略,如果备份到服务器本地,如果存储损坏,备份会同正常数据一起丢失。也就是说需要…

C++力扣题目232--用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头…

Java经典框架之Spring MVC

Spring MVC Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. Spring MVC 入门案例 2. 基…

云计算1.0、云原生2.0、AI云计算3.0,是解除IT互联网人才35岁的危机之道?

互联网员工的“35岁”危机,算不上一个新鲜的话题。年轻人不断涌入大厂的同时,老员工的受挫与焦虑也在同步发生。 “员工35岁被裁”“高龄员工劝退”,论坛、新闻里一些案例,更是放大了互联网人的35岁危机感。处在上有老、下有小的…

SpringBoot整合JWT+Spring Security+Redis实现登录拦截(二)权限认证

上篇博文中我们已经实现了登录拦截,接下来我们继续补充代码,实现权限的认证 一、RBAC权限模型 什么事RBAC权限模型? RBAC权限模型(Role-Based Access Control)即:基于角色的权限访问控制。在RBAC中&#x…

黑豹程序员-平方根倒数速算法

程序员约翰卡马克(John Carmack)在《雷神之锤 III 竞技场》源代码中的平方根倒数速算法(Fast Inverse Square Root,Fast InvSqrt()),看过之后大为惊奇。 该算法的意义在于减少了求平方根倒数时浮点运算操作…

第一个程序:HelloWorld——IDEA 使用

IDEA创建是:项目(projefct)、模块(module)、包(package)、类(class) 1.双击打开IDEA,勾选Do not import settings点击OK。 2.选择New Project这里选择创建一个空的项目名为helloworld2023,选择项目创建路径,最后点击创建即可。 3.…

OPNET Modeler帮助文档的打开方式

前面有篇文章修改OPNET帮助文档的默认打开浏览器 & 给Edge浏览器配置IE Tab插件已经提到了打开OPNET Modeler打开帮助文档的方法,有时候打开时会显示如下。 界面中没有什么内容加载出来!我是在Google浏览器中打开的,其他的浏览器也是一样…

关于个人Git学习记录及相关

前言 可以看一下猴子都能懂的git入门,图文并茂不枯燥 猴子都能懂的git入门 学习东西还是建议尽可能的去看官方文档 权威且详细 官方文档 强烈建议看一下GitHub漫游指南及开源指北,可以对开源深入了解一下,打开新世界的大门! …

使用YT Config Tools工具导出引脚配置清单至Excel文件

使用YT Config Tool工具导出引脚配置清单至Excel文件 文章目录 使用YT Config Tool工具导出引脚配置清单至Excel文件IntroductionOperations在YTC中导入hello_world样例工程在Pinout Configuration标签页中配置引脚保存源码工程导出Excel文件 Conclusion Introduction YT Conf…

如何进行实例管理

目录 修改实例规格 修改网络带宽 网站的访问量每天都比较高,网站明显变慢了,这是怎么回事? 这说明你的网站的并发访问能力已经不足了,并发访问是指同一时间,多个用户请求访问同一个域名下的资源或服务,请…

postgresql|数据库|LVM快照热备冷恢复数据库的思考

一, LVM快照备份的意义 数据库备份一直是数据库运维工作中的重点,一个完备的备份不仅仅是仅有后悔药的功能,还可能有迁移数据库的作用。 那么,数据库备份系统我们需要的,也就是看重的是四个点,甚至更多的…