""" 版本公开 API 蓝图:当前版本、最新版本下载链接 """ import os from flask import Blueprint, jsonify, current_app from utils.db import get_db version_bp = Blueprint('version', __name__, url_prefix='/api') @version_bp.route('/version') def api_version(): """检测更新:返回当前版本及可选的最新版本信息""" return jsonify({ 'version': os.environ.get('APP_VERSION', '1.0.0'), 'desc': '', 'url': os.environ.get('APP_UPDATE_URL', ''), }) @version_bp.route('/version/latest') def api_version_latest(): """GET 获取最新版本的下载链接(取最新一条) 排序改用 id 而非 created_at:同一秒内写入多行时 created_at 无法定序,会取错版本。 """ conn = None try: conn = get_db() with conn.cursor() as cur: cur.execute( "SELECT version, file_url FROM web_config ORDER BY id DESC LIMIT 1" ) row = cur.fetchone() if not row: return jsonify({'version': None, 'file_url': None}) return jsonify({ 'version': row['version'] or '', 'file_url': row['file_url'] or '', }) except Exception as e: current_app.logger.error('[version] internal error: %s', e, exc_info=True) return jsonify({'error': '服务器内部错误,请稍后重试'}), 500 finally: # 异常路径同样要关连接:此前 conn.close() 写在 try 内,查询抛错即泄漏连接 if conn is not None: try: conn.close() except Exception: pass