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

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

相关推荐
安逸sgr7 小时前
【端侧 AI 实战】BitNet 详解:1-bit LLM 推理优化从原理到部署!
人工智能·python·scrapy·fastapi·ai编程·claude
曲幽2 天前
🐢 从0到1,FastAPI + PostgreSQL + Tortoise ORM 实战避坑指南
postgresql·fastapi·orm·migration·pythonweb·asyncpg·tortoise·aerich
rising start2 天前
FastAPI进阶开发:中间件、依赖注入
中间件·fastapi·依赖注入
曲幽2 天前
FastAPI + PostgreSQL 实战:给应用装上“缓存”和“日志”翅膀
redis·python·elasticsearch·postgresql·logging·fastapi·web·es·fastapi-cache
曲幽3 天前
FastAPI + PostgreSQL 实战:从入门到不踩坑,一次讲透
python·sql·postgresql·fastapi·web·postgres·db·asyncpg
曲幽4 天前
数据库实战:FastAPI + SQLAlchemy 2.0 + Alembic 从零搭建,踩坑实录
python·fastapi·web·sqlalchemy·db·asyncio·alembic
曲幽8 天前
FastAPI流式输出实战与避坑指南:让AI像人一样“边想边说”
python·ai·fastapi·web·stream·chat·async·generator·ollama
曲幽10 天前
不止于JWT:用FastAPI的Depends实现细粒度权限控制
python·fastapi·web·jwt·rbac·permission·depends·abac