编写fastapi接口服务

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

step1:安装必要库

pip install fastapi uvicorn

step2:构建代码

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

from fastapi import FastAPI, Queryapp = 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 WaterMarkapp = 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 uvicornuvicorn.run(app, host="0.0.0.0", port=8886)

解释一下

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


postman界面调用信息:

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux6.3、IO基础(文件描述符及分析系统接口细节)

个人主页:Lei宝啊 愿所有美好如期而遇 前言 我们介绍文件描述符的顺序是: 为什么我们新打开几个文件,open返回值fd从3开始?fd与FILE*的关系?fd的理解? 我们就很疑惑,0,1,2哪里去了&#xff…

2015年第四届数学建模国际赛小美赛A题飞机上的细长座椅解题全过程文档及程序

2015年第四届数学建模国际赛小美赛 A题 飞机上的细长座椅 原题再现: 航空公司座位是指在旅途中乘客可以乘坐的座位。一些航空公司现在推出了新的经济舱“超薄”座位。这些座椅除了重量较轻外,理论上还允许航空公司在不显著影响乘客舒适度的情况下增加运…

电脑屏幕保护时间怎么设置?这4个方法很管用!

“我的工作经常都需要使用电脑,有时候使用时间比较长,会有眼睛疲惫的感觉。想问问电脑屏幕保护时间应该怎么设置呢?有什么可以快速对电脑屏幕保护时间进行设置的方法吗?” 在现代生活中,电脑已经成为我们不可或缺的工具…

L1-061:新胖子公式

题目描述 根据钱江晚报官方微博的报导,最新的肥胖计算方法为:体重(kg) / 身高(m) 的平方。如果超过 25,你就是胖子。于是本题就请你编写程序自动判断一个人到底算不算胖子。 输入格式: 输入在一行中给出两个正数,依次为…

探秘Python中filter函数的妙用:高效的数据筛选利器

概要 Python作为一门易学易用的编程语言,其内置函数filter()能够帮助开发者更加高效地进行数据筛选和处理。本文将详细介绍filter函数的使用教程,帮助读者了解其原理、语法和常见应用场景,并给出一些实用的示例代码。 一、filter函数简介及原…

Java基于TCP网络编程的群聊功能

服务端 import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List;public class Server2 {public static List<Socket> onlineList new ArrayList<>();public static void main(String[] args) throws Except…

Java期末考试“大招”

目录 1.下面三者的区别 2.基本数据类型 3.变量的作用范围&#xff0c;类变量&#xff0c;实例变量。局部变量的区别 4.普通类和抽象类和内部类的区别 5.面向对象编程的三大特征 6.封装实现的过程和实现的必要性 7.子类从父类哪里继承了什么&#xff1f; 8.简述多态的实…

鸿蒙原生应用/元服务开发-Stage模型能力接口(十)上

ohos.app.form.FormExtensionAbility (FormExtensionAbility) FormExtensionAbility为卡片扩展模块&#xff0c;提供卡片创建、销毁、刷新等生命周期回调。 本模块首批接口从API version 9开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。本模块接…

shell 编程中内置的变量(冷门又好用)

简介 分别盘点一下 shell 中的内置变量&#xff0c;真的巨好用&#xff01;&#xff01;&#xff01;包括&#xff1a;环境变量类、shell 变量类、终端设置类和其他一些变量。 常用的内置变量目录如下 1. 环境变量类 $MACHTYPE&#xff1a;机器类型 $OSTYPE&#xff1a;操作…

HBase深度历险 | 京东物流技术团队

简介 HBase 的全称是 Hadoop Database&#xff0c;是一个分布式的&#xff0c;可扩展&#xff0c;面向列簇的数据库&#xff0c;是一个通过大量廉价的机器解决海量数据的高速存储和读取的分布式数据库解决方案。本文会像剥洋葱一样&#xff0c;层层剥开她的心。 特点 首先我…

Jenkins Tutorial

什么是Jenkins Jenkins是一个自动化平台&#xff0c;它允许你使用pipelines去部署应用。它也可以自动化其他任务。 BUILDTESTDEPLOYMENT Jenkins 架构 首先&#xff0c;你拥有一个Master Server&#xff0c;它控制pipelines和安排Build到你的Agent上&#xff1b; 其次&…

【超详细前后端项目搭建】前端vue3+ts项目(引入ElementPlus、Axios)、后端springboot搭建(创建接口操作mysql数据库)实现前后端联调

目录 前言一、前端项目1、使用vue脚手架创建项目1.1检查vue版本1.2 使用vue脚手架创建项目 2、删除项目多余文件&#xff0c;修改配置项目2.1、删除以下文件2.1、在views下创建index文件2.2、修改router/index.ts路由文件&#xff1a;2.3、修改App.vue文件&#xff1a;2.4、初始…