编写fastapi接口服务

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

step1:安装必要库

python 复制代码
pip install fastapi uvicorn

step2:构建代码

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

python 复制代码
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入口:

python 复制代码
uvicorn main:app --reload

step4:更多指南

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

Other:自己写了个接口

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

python 复制代码
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界面调用信息:

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

相关推荐
GuokLiu1 天前
241121-REST、WebService与FastAPI之间的关系及示例代码
fastapi
T0uken3 天前
【Python】FastAPI:Token认证
开发语言·python·fastapi
OT.Ter4 天前
基于FastAPI实现本地大模型API封装调用
人工智能·算法·大模型·fastapi
skywalk81636 天前
三周精通FastAPI:42 手动运行服务器 - Uvicorn & Gunicorn with Uvicorn
运维·服务器·fastapi·gunicorn
股票GPT分析7 天前
如何利用必盈接口在 C#中完成股票量化程序
运维·服务器·数据库·python·fastapi
Magicapprentice7 天前
gunicorn 和 uvicorn部署fastapi 或者flask
flask·fastapi·gunicorn
股票GPT分析7 天前
如何在C#中处理必盈接口返回的股票数据?
python·fastapi
m0_637146937 天前
如何在FastAPI中灵活使用路径参数、查询参数和请求体参数进行接口设计
数据库·oracle·fastapi
m0_594526308 天前
探索 TraceBoard:统计你的键盘按键使用情况
python·计算机外设·开源软件·fastapi
晴天のVlog9 天前
Fastapi使用MongoDB作为数据库
数据库·python·mongodb·fastapi