usermod/Router/UserRouter.py

48 lines
1.7 KiB
Python

import os
from pathlib import Path
from fastapi import APIRouter, Depends, HTTPException, UploadFile, File
from sqlalchemy.orm import Session
from Crud import UserCrud
from Schemas import UserSchemas
from Schemas.UserSchemas import TokenData
from Utils.AuthUtils import token_data_depend
from Utils.CommonUtils import file_md5
from Utils.SqlAlchemyUtils import get_db
router = APIRouter(
tags=["用户操作"],
prefix="/api/user",
dependencies=[Depends(token_data_depend)]
)
@router.post("/get_user_info", summary="获取用户信息", response_model=UserSchemas.UserInfo)
def get_user_info(token_data: TokenData = Depends(token_data_depend), db: Session = Depends(get_db)):
user_id = token_data.id
user = UserCrud.get_user_by_id(db, user_id)
if not user:
raise HTTPException(404, detail="未找到用户信息")
user_info = user.as_info()
return user_info
@router.post('/avatar_upload',summary="用户头像上传")
def avatar_upload(file: UploadFile = File(...), token_data: TokenData = Depends(token_data_depend)):
if file.content_type not in ['image/png', 'image/jpeg']:
raise Exception('图片格式应为png和jpg')
contents = file.file.read(1024 * 201)
if len(contents) > 1024 * 200:
raise Exception("文件大小不能大于200kb")
save_path = Path("static_data/user/avatar")
if not os.path.exists(save_path):
os.makedirs(save_path)
file_md = file_md5(contents)
if not os.path.exists(save_path / file_md):
with open(save_path / file_md, 'wb') as f:
f.write(contents)
file_url_path = f"/static_data/user/avatar/{file_md}"
UserCrud.change_user_info(token_data.id, {'avatar': file_url_path})
return {"msg": "上传成功", "state": 1}