f103148ebf
基于 Flask + MySQL + Bootstrap 5 的全栈个人资料库管理系统。 主要功能: - 管理员/普通用户双角色权限体系,全站登录保护 - 资源管理:文本、图片、音频、视频四类资源 - 三种添加方式:本地上传(拖拽)、URL 后台下载、磁力下载(aria2c) - 在线预览:文本、图片、HTML5 音视频播放器 - 安全:bcrypt 加盐密码哈希、CSRF 防护、SQLAlchemy ORM 防注入 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
48 lines
1.8 KiB
Python
48 lines
1.8 KiB
Python
from datetime import datetime
|
|
from app.extensions import db
|
|
|
|
|
|
class SystemSetting(db.Model):
|
|
__tablename__ = 'system_settings'
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
key = db.Column(db.String(64), unique=True, nullable=False, index=True)
|
|
value = db.Column(db.Text, nullable=True)
|
|
value_type = db.Column(db.Enum('string', 'integer', 'boolean', 'json'),
|
|
default='string')
|
|
description = db.Column(db.String(255), nullable=True)
|
|
updated_at = db.Column(db.DateTime, default=datetime.utcnow,
|
|
onupdate=datetime.utcnow)
|
|
|
|
def __repr__(self):
|
|
return f'<SystemSetting {self.key}={self.value}>'
|
|
|
|
@classmethod
|
|
def get(cls, key, default=None):
|
|
setting = cls.query.filter_by(key=key).first()
|
|
if setting is None:
|
|
return default
|
|
return setting.value
|
|
|
|
@classmethod
|
|
def set(cls, key, value, description=None):
|
|
setting = cls.query.filter_by(key=key).first()
|
|
if setting:
|
|
setting.value = str(value)
|
|
setting.updated_at = datetime.utcnow()
|
|
else:
|
|
setting = cls(key=key, value=str(value), description=description)
|
|
db.session.add(setting)
|
|
db.session.commit()
|
|
|
|
# 默认配置项
|
|
DEFAULTS = {
|
|
'site_name': ('个人资料库', '站点名称'),
|
|
'site_description': ('我的个人多媒体资料管理系统', '站点描述'),
|
|
'allow_register': ('true', '是否允许用户注册'),
|
|
'max_upload_mb': ('500', '单次最大上传大小(MB)'),
|
|
'allowed_types': ('text,image,audio,video', '允许的资源类型'),
|
|
'enable_magnet': ('true', '是否启用磁力下载'),
|
|
'enable_url_download': ('true', '是否启用 URL 下载'),
|
|
}
|