from fastapi import APIRouter, Request from starlette.responses import JSONResponse, FileResponse from core.current_user import CurrentUserProvider from core.decorators import LoginLog, Authorize, OperationLog from core.enums import BusinessTypeEnum from domain.services import SysUserService, get_user_service account_router = APIRouter(prefix="/account", tags=["用户账户管理"]) @account_router.post("/login", summary="用户登录") @LoginLog("用户登录") async def login(request: Request, user_service: SysUserService = get_user_service()): data = await request.json() username = data.get("username") password = data.get("password") await user_service.login(username, password) @account_router.post("/logout", summary="用户登出") @LoginLog("用户登出") @Authorize() async def logout(request: Request): request.state.user_id = None await CurrentUserProvider.clear_current_user() # @router.post("/register", summary="用户注册") # @LoginLog("用户注册") # async def register(request: Request, user_service: SysUserService = get_user_service()): # data = await request.json() # username = data.get("username") # password = data.get("password") # await user_service.register(username, password) @account_router.post("/update-password", summary="更新用户密码") @OperationLog("更新用户密码", business_type=BusinessTypeEnum.UPDATE) @Authorize() async def update_password( request: Request, user_service: SysUserService = get_user_service() ): data = await request.json() current_user = CurrentUserProvider.get_current_user() old_password = data.get("old_password") new_password = data.get("new_password") await user_service.change_password(current_user.user_id, old_password, new_password) @account_router.get("/test/{id:int}", summary="TEST") async def test(request: Request): id = int(request.path_params.get("id")) from utils import ResponseUtil import os if id >= 10: return {"id_10": id} elif id >= 9: return JSONResponse(content={"id_9": id}) elif id >= 8: return ResponseUtil.success(data={"id_8": id}) elif id >= 7: return ResponseUtil.error() elif id >= 6: return ResponseUtil.failure() elif id >= 5: return ResponseUtil.forbidden() elif id >= 4: return ResponseUtil.unauthorized() elif id >= 3: return ResponseUtil.json({"id_json": id}) elif id >= 2: base_dir = os.path.dirname(os.path.abspath(__file__)) print(f"base_dir:{base_dir}") # 修改路径构建逻辑,使用绝对路径定位 project_root = os.path.dirname( os.path.dirname(base_dir) ) # 上两级定位到项目根目录 print(f"project_root:{project_root}") image_path = os.path.join( project_root, "vapy_admin", "download_files", "300_7.jpg" ) print(f"image_path:{image_path}") return FileResponse(image_path, media_type="image/jpeg") # 返回图片文件 elif id >= 1: return str(id) else: return None # 新增路由来返回图片文件 @account_router.get("/image", summary="返回图片文件") async def get_image(): image_path = "BACKEND/vapy_admin/download_files/300_7.jpg" # 图片文件路径 return FileResponse(image_path, media_type="image/jpeg") # 返回图片文件