修正了程序,优化了目录

This commit is contained in:
carry 2025-01-22 13:58:39 +08:00
parent bb314a2c6b
commit bf856af9f9
7 changed files with 26 additions and 20 deletions

View File

@ -1,10 +1,13 @@
from dotenv import load_dotenv
load_dotenv()
import logging
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from config import JWT_CONFIG, LOGGING_CONFIG, SYSTEM_ADMIN_CONFIG
from services.db import create_db_engine, init_db, close_db_connection
from routes.auth import auth_router
from routes.users import users_router
from routes.auth import router as auth_router
from routes.users import router as users_router
# 配置日志
logging.basicConfig(

View File

@ -2,9 +2,9 @@ from fastapi import APIRouter, Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer
from sqlalchemy.ext.asyncio import AsyncSession
from schemas.auth import TokenResponse, LoginRequest, RefreshTokenRequest
from services.auth_service import create_tokens_response, verify_token, refresh_tokens
from services.user_services import authenticate_user
from services.db import get_db
from services.auth import create_tokens_response, verify_token, refresh_tokens
from services.user import authenticate_user
from services.db import get_db_session
router = APIRouter(tags=["auth"])
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@ -12,7 +12,7 @@ oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@router.post("/login", response_model=TokenResponse)
async def login(
login_data: LoginRequest,
session: AsyncSession = Depends(get_db)
session: AsyncSession = Depends(get_db_session)
):
user = await authenticate_user(session, login_data.username, login_data.password)
if not user:

View File

@ -3,7 +3,7 @@ from fastapi.security import OAuth2PasswordBearer
from typing import Optional
from schemas.auth import TokenPayload
from schemas.user import UserRole
from services.auth_service import verify_token
from services.auth import verify_token
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="auth/login")

View File

@ -3,7 +3,7 @@ from typing import List, Optional
from schemas.auth import TokenPayload
from schemas.user import UserCreate, UserUpdate, UserResponse, UserRole
from routes.depends import get_current_user,get_current_admin
from services.user_services import get_user_by_id,get_users,create_user,update_user,delete_user
from services.user import get_users,create_user,update_user,delete_user#,get_user_by_id
from services.db import get_db_session
router = APIRouter(tags=["users"])
@ -15,12 +15,12 @@ async def get_users(
role: Optional[str] = None,
current_user_token: TokenPayload = Depends(get_current_user)
):
current_user = await get_user_by_id(current_user_token.id)
if current_user is None:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="User not found"
)
# current_user = await get_user_by_id(current_user_token.id)
# if current_user is None:
# raise HTTPException(
# status_code=status.HTTP_404_NOT_FOUND,
# detail="User not found"
# )
async with get_db_session() as session:
skip = (page - 1) * limit
users = await get_users(session, skip=skip, limit=limit)

View File

@ -1,10 +1,10 @@
from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker
from ..models.user import Base, User, UserRole
from models.user import Base, User, UserRole
from sqlalchemy import select
from contextlib import asynccontextmanager
from config import SYSTEM_ADMIN_CONFIG, DATABASE_CONFIG
from user_services import get_password_hash
from services.user import get_password_hash
from typing import AsyncGenerator
# 全局数据库引擎实例
@ -44,8 +44,9 @@ async def init_db(engine: AsyncEngine):
# 创建所有表
await conn.run_sync(Base.metadata.create_all)
async with AsyncSession(engine) as session:
# 检查系统管理员是否存在
result = await conn.execute(
result = await session.execute(
select(User).where(User.role == UserRole.SYSTEM_ADMIN)
)
if not result.scalars().first():
@ -56,8 +57,8 @@ async def init_db(engine: AsyncEngine):
role=UserRole.SYSTEM_ADMIN,
description=SYSTEM_ADMIN_CONFIG['description']
)
conn.add(admin)
await conn.commit()
session.add(admin)
await session.commit()
async def close_db_connection():
"""关闭数据库连接"""

View File

@ -7,7 +7,6 @@ from schemas.user import UserCreate, UserUpdate, UserResponse
# 创建一个密码上下文对象,指定使用 bcrypt 加密算法
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
async def create_user(session: AsyncSession, user_data: UserCreate) -> UserResponse:
"""创建用户"""
@ -60,6 +59,9 @@ def verify_password(plain_password: str, hashed_password: str) -> bool:
"""验证输入的明文密码是否与存储的哈希密码匹配"""
return pwd_context.verify(plain_password, hashed_password)
def get_password_hash(password: str) -> str:
"""生成使用 bcrypt 的密码哈希"""
return pwd_context.hash(password)
async def authenticate_user(session: AsyncSession, username: str, password: str) -> Optional[UserResponse]:
"""验证用户登录"""