编写fastapi接口服务

发布时间:2023年12月25日

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界面调用信息:

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

文章来源:https://blog.csdn.net/2301_77554343/article/details/135198968
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。