131 lines
4.2 KiB
Python
131 lines
4.2 KiB
Python
from flask import Blueprint, request, jsonify
|
||
from flask_jwt_extended import jwt_required
|
||
from ..models import SystemSettings, db
|
||
from functools import wraps
|
||
|
||
settings_bp = Blueprint('settings', __name__)
|
||
|
||
def admin_required(fn):
|
||
@wraps(fn)
|
||
@jwt_required()
|
||
def wrapper(*args, **kwargs):
|
||
from flask_jwt_extended import get_jwt
|
||
if not get_jwt().get('is_admin'):
|
||
return jsonify({'message': '需要管理员权限'}), 403
|
||
return fn(*args, **kwargs)
|
||
return wrapper
|
||
|
||
@settings_bp.route('/settings', methods=['GET'])
|
||
@admin_required
|
||
def get_all_settings():
|
||
"""获取所有系统设置"""
|
||
settings = SystemSettings.query.all()
|
||
return jsonify([setting.to_dict() for setting in settings]), 200
|
||
|
||
@settings_bp.route('/settings/<string:key>', methods=['GET'])
|
||
@admin_required
|
||
def get_setting(key):
|
||
"""获取单个设置"""
|
||
setting = SystemSettings.query.filter_by(key=key).first()
|
||
if not setting:
|
||
return jsonify({'message': '设置不存在'}), 404
|
||
return jsonify(setting.to_dict()), 200
|
||
|
||
@settings_bp.route('/settings/<string:key>', methods=['PUT'])
|
||
@admin_required
|
||
def update_setting(key):
|
||
"""更新单个设置"""
|
||
data = request.get_json()
|
||
if 'value' not in data:
|
||
return jsonify({'message': '缺少value字段'}), 400
|
||
|
||
value = data['value']
|
||
description = data.get('description')
|
||
data_type = data.get('data_type', 'string')
|
||
|
||
setting = SystemSettings.set_value(key, value, description, data_type)
|
||
return jsonify(setting.to_dict()), 200
|
||
|
||
@settings_bp.route('/settings', methods=['PUT'])
|
||
@admin_required
|
||
def update_multiple_settings():
|
||
"""批量更新设置"""
|
||
data = request.get_json()
|
||
if not isinstance(data, dict):
|
||
return jsonify({'message': '数据格式错误'}), 400
|
||
|
||
updated_settings = []
|
||
for key, setting_data in data.items():
|
||
if isinstance(setting_data, dict):
|
||
value = setting_data.get('value')
|
||
description = setting_data.get('description')
|
||
data_type = setting_data.get('data_type', 'string')
|
||
else:
|
||
value = setting_data
|
||
description = None
|
||
data_type = 'string'
|
||
|
||
if value is not None:
|
||
setting = SystemSettings.set_value(key, value, description, data_type)
|
||
updated_settings.append(setting.to_dict())
|
||
|
||
return jsonify(updated_settings), 200
|
||
|
||
@settings_bp.route('/settings/defaults', methods=['POST'])
|
||
@admin_required
|
||
def init_default_settings():
|
||
"""初始化默认设置"""
|
||
default_settings = {
|
||
'daily_quota': {
|
||
'value': '5',
|
||
'description': '用户每日可领取文件数量',
|
||
'data_type': 'int'
|
||
},
|
||
'max_file_size': {
|
||
'value': '10485760', # 10MB
|
||
'description': '上传文件最大大小(字节)',
|
||
'data_type': 'int'
|
||
},
|
||
'auto_reset_quota': {
|
||
'value': 'true',
|
||
'description': '是否自动重置用户每日领取配额',
|
||
'data_type': 'bool'
|
||
},
|
||
'reset_hour': {
|
||
'value': '0',
|
||
'description': '每日配额重置时间(小时,0-23)',
|
||
'data_type': 'int'
|
||
},
|
||
'allow_registration': {
|
||
'value': 'true',
|
||
'description': '是否允许新用户注册',
|
||
'data_type': 'bool'
|
||
},
|
||
'require_admin_approval': {
|
||
'value': 'true',
|
||
'description': '新注册用户是否需要管理员审核',
|
||
'data_type': 'bool'
|
||
},
|
||
'site_name': {
|
||
'value': '文件领取系统',
|
||
'description': '网站名称',
|
||
'data_type': 'string'
|
||
},
|
||
'max_files_per_user': {
|
||
'value': '100',
|
||
'description': '用户最多可上传文件数量',
|
||
'data_type': 'int'
|
||
}
|
||
}
|
||
|
||
created_settings = []
|
||
for key, config in default_settings.items():
|
||
setting = SystemSettings.set_value(
|
||
key,
|
||
config['value'],
|
||
config['description'],
|
||
config['data_type']
|
||
)
|
||
created_settings.append(setting.to_dict())
|
||
|
||
return jsonify(created_settings), 201 |