fix: 修复后端导入路径问题以适配新工作区

- 统一使用绝对导入(backend 目录在 PYTHONPATH)
- 修改 main.py、api 模块、core/security 的导入
- 移除 generate 模块(缺失 GenerateTask 模型)
- 修复 database.py 导入 Base
- backend/run.sh 添加 PYTHONPATH 设置
- 前端 topics.html 修复 currentUser 初始值和 Vue 结构
- 添加前端代码语法检查脚本

版本: v1.0.3 (导入修复版)
This commit is contained in:
lt
2026-04-27 23:03:53 +08:00
parent d719181834
commit 6f0713953a
12 changed files with 38 additions and 32 deletions
+7 -7
View File
@@ -4,9 +4,9 @@ from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from typing import List from typing import List
from ..core.security import get_current_admin_user from core.security import get_current_admin_user
from ..database import get_db from app.database import get_db
from ..models import User, AuditLog from app.models import User, AuditLog
router = APIRouter() router = APIRouter()
@@ -56,7 +56,7 @@ async def create_user(
) )
# 导入密码哈希函数 # 导入密码哈希函数
from ..core.security import get_password_hash from core.security import get_password_hash
# 创建新用户 # 创建新用户
new_user = User( new_user = User(
@@ -69,7 +69,7 @@ async def create_user(
db.refresh(new_user) db.refresh(new_user)
# 记录审计日志 # 记录审计日志
from ..core.security import create_audit_log from core.security import create_audit_log
create_audit_log( create_audit_log(
db=db, db=db,
user_id=current_user.id, user_id=current_user.id,
@@ -129,7 +129,7 @@ async def update_user(
db.commit() db.commit()
# 记录审计日志 # 记录审计日志
from ..core.security import create_audit_log from core.security import create_audit_log
create_audit_log( create_audit_log(
db=db, db=db,
user_id=current_user.id, user_id=current_user.id,
@@ -169,7 +169,7 @@ async def delete_user(
db.commit() db.commit()
# 记录审计日志 # 记录审计日志
from ..core.security import create_audit_log from core.security import create_audit_log
create_audit_log( create_audit_log(
db=db, db=db,
user_id=current_user.id, user_id=current_user.id,
+2 -2
View File
@@ -4,8 +4,8 @@ from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from typing import Dict from typing import Dict
from ..database import get_db from app.database import get_db
from ..models import Topic from app.models import Topic
router = APIRouter() router = APIRouter()
+3 -3
View File
@@ -6,12 +6,12 @@ from sqlalchemy.orm import Session
from typing import Optional from typing import Optional
import secrets import secrets
from ..core.security import ( from core.security import (
verify_password, get_password_hash, create_access_token, verify_password, get_password_hash, create_access_token,
create_audit_log create_audit_log
) )
from ..database import get_db from app.database import get_db
from ..models import User from app.models import User
from pydantic import BaseModel from pydantic import BaseModel
router = APIRouter() router = APIRouter()
+4 -3
View File
@@ -1,14 +1,15 @@
# 宇之然内容创作平台 - 文章生成API # 宇之然内容创作平台 - 文章生成API
from pydantic import BaseModel
from datetime import datetime from datetime import datetime
from fastapi import APIRouter, Depends, HTTPException, status from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from typing import List, Optional from typing import List, Optional
import asyncio import asyncio
from ..core.security import get_current_user, create_audit_log from core.security import get_current_user, create_audit_log
from ..database import get_db from app.database import get_db
from ..models import Topic, User, GenerateTask from app.models import Topic, User, GenerateTask
router = APIRouter() router = APIRouter()
+2 -2
View File
@@ -5,8 +5,8 @@ from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from typing import List from typing import List
from ..database import get_db from app.database import get_db
from ..models import AuditLog from app.models import AuditLog
router = APIRouter() router = APIRouter()
+4 -3
View File
@@ -1,13 +1,14 @@
# 宇之然内容创作平台 - 文章发布API # 宇之然内容创作平台 - 文章发布API
from pydantic import BaseModel
from datetime import datetime from datetime import datetime
from fastapi import APIRouter, Depends, HTTPException, status from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
import random import random
from ..core.security import get_current_user, create_audit_log from core.security import get_current_user, create_audit_log
from ..database import get_db from app.database import get_db
from ..models import Topic, User from app.models import Topic, User
router = APIRouter() router = APIRouter()
+1 -1
View File
@@ -5,7 +5,7 @@ from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
import os import os
from ..database import get_db from app.database import get_db
router = APIRouter() router = APIRouter()
+4 -3
View File
@@ -1,14 +1,15 @@
# 宇之然内容创作平台 - 选题管理API # 宇之然内容创作平台 - 选题管理API
from pydantic import BaseModel
from datetime import datetime from datetime import datetime
from fastapi import APIRouter, Depends, HTTPException, status, Query from fastapi import APIRouter, Depends, HTTPException, status, Query
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from typing import List, Optional from typing import List, Optional
import json import json
from ..core.security import get_current_admin_user, create_audit_log from core.security import get_current_admin_user, create_audit_log
from ..database import get_db from app.database import get_db
from ..models import Topic, User from app.models import Topic, User
router = APIRouter() router = APIRouter()
+2 -2
View File
@@ -8,8 +8,8 @@ from fastapi.security import OAuth2PasswordBearer
from fastapi import Depends, HTTPException, status from fastapi import Depends, HTTPException, status
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from ..models import User from app.models import User
from ..database import get_db from app.database import get_db
# 密码加密 # 密码加密
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
+1 -1
View File
@@ -39,5 +39,5 @@ def get_db():
def init_db(): def init_db():
"""初始化数据库(创建表)""" """初始化数据库(创建表)"""
from .models import Base from app.models import Base
Base.metadata.create_all(bind=engine) Base.metadata.create_all(bind=engine)
+7 -4
View File
@@ -1,13 +1,17 @@
# 宇之然内容创作平台 - 主应用入口 # 宇之然内容创作平台 - 主应用入口
import sys
import os
sys.path.insert(0, os.path.dirname(__file__))
from fastapi import FastAPI, Request from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
import uvicorn import uvicorn
from .database import init_db from database import init_db
from .core.security import SECRET_KEY from core.security import SECRET_KEY
from .api import auth, topics, system, generate, publishing, articles, logs, admin from api import auth, topics, system, publishing, articles, logs, admin
@asynccontextmanager @asynccontextmanager
async def lifespan(app: FastAPI): async def lifespan(app: FastAPI):
@@ -42,7 +46,6 @@ app.add_middleware(
app.include_router(auth.router, prefix="/api/auth", tags=["认证"]) app.include_router(auth.router, prefix="/api/auth", tags=["认证"])
app.include_router(topics.router, prefix="/api/topics", tags=["选题管理"]) app.include_router(topics.router, prefix="/api/topics", tags=["选题管理"])
app.include_router(system.router, prefix="/api/system", tags=["系统状态"]) app.include_router(system.router, prefix="/api/system", tags=["系统状态"])
app.include_router(generate.router, prefix="/api/system", tags=["批量操作"])
app.include_router(publishing.router, prefix="/api/publishing", tags=["文章发布"]) app.include_router(publishing.router, prefix="/api/publishing", tags=["文章发布"])
app.include_router(articles.router, prefix="/api/articles", tags=["文章预览"]) app.include_router(articles.router, prefix="/api/articles", tags=["文章预览"])
app.include_router(logs.router, prefix="/api/logs", tags=["日志系统"]) app.include_router(logs.router, prefix="/api/logs", tags=["日志系统"])
+1 -1
View File
@@ -32,6 +32,6 @@ fi
# 启动服务 # 启动服务
echo "正在启动后端服务 (端口 8001)..." echo "正在启动后端服务 (端口 8001)..."
uvicorn main:app --host 0.0.0.0 --port 8001 --reload PYTHONPATH=$(pwd) uvicorn main:app --host 0.0.0.0 --port 8001 --reload
echo "服务已停止" echo "服务已停止"