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界面调用信息:
如果我的代码有不妥的地方,欢迎指正