fastAPI/website.py

70 lines
2.0 KiB
Python

from fastapi import FastAPI, HTTPException, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import FileResponse
from utils.pictures_handle import get_pictures_info
from utils.pictures_handle import get_total_pages
import os
from fastapi.staticfiles import StaticFiles
app = FastAPI()
app.mount("/static", StaticFiles(directory="pictures"), name="static")
app.add_middleware(
CORSMiddleware,
allow_origins=["http://localhost:5173"], # 允许的源列表
allow_credentials=True,
allow_methods=["*"], # 允许的方法
allow_headers=["*"], # 允许的头
)
@app.get("/")
async def root():
return "welcome to fastAPI!"
@app.get("/api/get-menu")
async def get_menu():
menu_list = [
{"id": 1, "menu_name": "首页", "url": "/", "src": "/index.svg"},
{"id": 2, "menu_name": "图片", "url": "/photos", "src": "/photo.svg"},
{"id": 3, "menu_name": "视频", "url": "/videos", "src": "/videos.svg"},
{"id": 4, "menu_name": "关于", "url": "/about", "src": "/about.svg"}
]
return {
"code": 0,
"msg": "ok",
"data": menu_list
}
@app.get("/api/get-photo-list")
async def get_photo_list(page: int = 1, page_size: int = 10):
dir_path = "pictures"
total_pages = get_total_pages(dir_path, page_size)
photo_list = get_pictures_info(dir_path, page, page_size)
for photo in photo_list:
photo["photo_url"] = f"http://127.0.0.1:8000/static/{photo['photo_name']}"
return {
"code": 0,
"msg": "ok",
"data": photo_list,
"total_pages": total_pages
}
@app.get("/static/{photo_name}")
async def get_photo(photo_name: str,request: Request):
request_path = str(request.url)
dir = "pictures"
file_path = os.path.join(dir, photo_name)
if os.path.exists(file_path):
return FileResponse(file_path)
else:
print(f"ERROR: {request_path}")
return {
"code": -1,
"msg": "error",
"data": None
}