demo_controller部分修改 #4

Merged
ppy4sjqvf merged 5 commits from ybw-branch into develop 2 months ago

@ -6,7 +6,7 @@
from flask import Blueprint, request, jsonify
from flask_jwt_extended import jwt_required, get_jwt_identity
from app import db
from app.database import User, Batch, Image
from app.database import User, Task, Image
admin_bp = Blueprint('admin', __name__)
@ -19,7 +19,7 @@ def admin_required(f):
current_user_id = get_jwt_identity()
user = User.query.get(current_user_id)
if not user or user.role != 'admin':
if not user or user.role.code != 'admin':
return jsonify({'error': '需要管理员权限'}), 403
return f(*args, **kwargs)
@ -58,8 +58,11 @@ def get_user_detail(user_id):
return jsonify({'error': '用户不存在'}), 404
# 获取用户统计信息
total_tasks = Batch.query.filter_by(user_id=user_id).count()
total_images = Image.query.filter_by(user_id=user_id).count()
total_tasks = Task.query.filter_by(user_id=user_id).count()
# 查找用户的所有图片
user_tasks = Task.query.filter_by(user_id=user_id).all()
task_ids = [task.task_id for task in user_tasks]
total_images = Image.query.filter_by(task_id in (task_ids)).count()
user_dict = user.to_dict()
user_dict['stats'] = {
@ -82,8 +85,15 @@ def create_user():
username = data.get('username')
password = data.get('password')
email = data.get('email')
role = data.get('role', 'user')
max_concurrent_tasks = data.get('max_concurrent_tasks', 0)
current_user_id = get_jwt_identity()
current_user = User.query.get(current_user_id)
current_user_role = current_user.role.code
if current_user.role == 'admin':
role = data.get('role', 'user')
else:
role = 'user'
if not username or not password:
return jsonify({'error': '用户名和密码不能为空'}), 400
@ -100,8 +110,7 @@ def create_user():
user = User(
username=username,
email=email,
role=role,
max_concurrent_tasks=max_concurrent_tasks
role_id=User.role_to_id(role),
)
user.set_password(password)
@ -145,10 +154,7 @@ def update_user(user_id):
user.email = new_email
if 'role' in data:
user.role = data['role']
if 'max_concurrent_tasks' in data:
user.max_concurrent_tasks = data['max_concurrent_tasks']
user.role = user.role_to_id(data['role'])
if 'is_active' in data:
user.is_active = bool(data['is_active'])
@ -166,7 +172,7 @@ def update_user(user_id):
except Exception as e:
db.session.rollback()
return jsonify({'error': f'更新用户失败: {str(e)}'}), 500
@admin_bp.route('/users/<int:user_id>', methods=['DELETE'])
@jwt_required()
@admin_required
@ -202,16 +208,16 @@ def get_system_stats():
from app.database import EvaluationResult
total_users = User.query.count()
active_users = User.query.filter_by(is_active=True).count()
admin_users = User.query.filter_by(role='admin').count()
active_users = User.query.filter_by(is_active = True).count()
admin_users = User.query.filter_by(role_id = 0).count()
total_tasks = Batch.query.count()
completed_tasks = Batch.query.filter_by(status='completed').count()
processing_tasks = Batch.query.filter_by(status='processing').count()
failed_tasks = Batch.query.filter_by(status='failed').count()
total_tasks = Task.query.count()
completed_tasks = Task.query.filter_by(status='completed').count()
processing_tasks = Task.query.filter_by(status='processing').count()
failed_tasks = Task.query.filter_by(status='failed').count()
waiting_tasks = Task.query.filter_by(status='waiting').count()
total_images = Image.query.count()
total_evaluations = EvaluationResult.query.count()
return jsonify({
'stats': {
@ -225,12 +231,10 @@ def get_system_stats():
'completed': completed_tasks,
'processing': processing_tasks,
'failed': failed_tasks
'waiting': waiting_tasks
},
'images': {
'total': total_images
},
'evaluations': {
'total': total_evaluations
}
}
}), 200

@ -5,7 +5,7 @@
from flask import Blueprint, send_file, jsonify, current_app
from flask_jwt_extended import jwt_required
from app.database import PerturbationConfig, FinetuneConfig
from app.database import Perturbation, Finetune
import os
import glob
@ -20,7 +20,7 @@ def list_demo_images():
# 获取演示原始图片 - 修正路径构建
# 获取项目根目录backend目录
project_root = os.path.dirname(current_app.root_path)
original_folder = os.path.join(project_root, current_app.config['DEMO_ORIGINAL_FOLDER'])
original_folder = os.path.join(project_root, current_au6pp.config['DEMO_ORIGINAL_FOLDER'])
if os.path.exists(original_folder):
original_files = glob.glob(os.path.join(original_folder, '*'))

@ -17,6 +17,7 @@ class Role(db.Model):
__tablename__ = 'role'
role_id = db.Column(Integer, primary_key=True, comment='角色ID')
role_code = db.Column(String(50), unique=True, nullable=False, comment='角色代码 (e.g., admin, vip, user)')
name = db.Column(String(50), nullable=False, comment='角色名称 (e.g., Administrator, VIP, User)')
max_concurrent_tasks = db.Column(Integer, default=1, comment='最大并发任务数')
description = db.Column(Text, comment='角色描述')
@ -53,6 +54,27 @@ class User(db.Model):
"""验证密码"""
return check_password_hash(self.password_hash, password)
def to_dict(self):
"""转换为字典形式,便于序列化"""
return {
'user_id': self.user_id,
'username': self.username,
'email': self.email,
'role': self.role.name,
'is_active': self.is_active,
'created_at': self.created_at.isoformat(),
'updated_at': self.updated_at.isoformat()
}
def role_to_id(self, role):
"""将角色名称转换为角色ID"""
role_map = {
'admin': 1,
'vip': 2,
'user': 3
}
return role_map.get(role, 3) # 默认返回普通用户ID
def __repr__(self):
return f'<User {self.username}>'

@ -27,8 +27,8 @@ def init_database():
# 初始化任务状态数据
task_status = [
{'status_code': 'pending', 'status_name': '待处理', 'description': '任务已创建,等待处理'},
{'status_code': 'in_progress', 'status_name': '进行中', 'description': '任务正在处理中'},
{'status_code': 'waiting', 'status_name': '待处理', 'description': '任务已创建,等待处理'},
{'status_code': 'processing', 'status_name': '进行中', 'description': '任务正在处理中'},
{'status_code': 'completed', 'status_name': '已完成', 'description':'任务已成功完成'},
{'status_code': 'failed', 'status_name': '失败', 'description': '任务处理失败'}
]

Loading…
Cancel
Save