From 8530e94c41ccd9a495151b3b6226a22a4998c86c Mon Sep 17 00:00:00 2001 From: Lxy Date: Mon, 16 Feb 2026 09:25:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=EF=BC=9B127.0.0.1:5000/config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/app.py | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/web/app.py b/web/app.py index 30f8647..91a7d33 100644 --- a/web/app.py +++ b/web/app.py @@ -874,5 +874,104 @@ def get_selected_symbols(): """获取自选品种列表""" return jsonify({'selected_symbols': selected_symbols}) +@app.route('/config', methods=['GET', 'POST']) +def config(): + """配置页面""" + if request.method == 'POST': + # 保存配置 + try: + # 读取表单数据 + data_adapter_type = request.form.get('data_adapter_type', 'tqsdk') + tqsdk_username = request.form.get('tqsdk_username', '') + tqsdk_password = request.form.get('tqsdk_password', '') + rqdata_username = request.form.get('rqdata_username', '') + rqdata_password = request.form.get('rqdata_password', '') + debug = request.form.get('debug', 'false') == 'true' + enable_cache = request.form.get('enable_cache', 'true') == 'true' + cache_expiry = request.form.get('cache_expiry', '3600') + default_ai_model = request.form.get('default_ai_model', 'deepseek') + ai_api_key = request.form.get('ai_api_key', '') + + # 写入配置文件 + config_content = f"""# 数据源配置文件 +# 统一数据获取接口的配置参数 + +# 数据源类型配置 +# 可选值: tqsdk, rqdata +DATA_ADAPTER_TYPE = "{data_adapter_type}" + +# TQSDK账号配置(可选) +# 未配置时会使用模拟数据 +TQSDK_USERNAME = "{tqsdk_username}" +TQSDK_PASSWORD = "{tqsdk_password}" + +# RQData账号配置(可选) +# 未配置时会使用模拟数据 +RQDATA_USERNAME = "{rqdata_username}" +RQDATA_PASSWORD = "{rqdata_password}" + +# 调试模式配置 +# 设置为True时启用详细日志 +DEBUG = {debug} + +# 数据源连接超时设置(秒) +CONNECTION_TIMEOUT = 30 + +# 数据缓存配置 +# 设置为True时启用数据缓存,提高重复查询性能 +ENABLE_CACHE = {enable_cache} +# 缓存过期时间(秒) +CACHE_EXPIRY = {cache_expiry} + +# AI模型配置 +# 默认AI模型 +DEFAULT_AI_MODEL = "{default_ai_model}" +# AI模型API Key +AI_API_KEY = "{ai_api_key}" +""" + + with open(os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'config.py'), 'w', encoding='utf-8') as f: + f.write(config_content) + + flash('配置保存成功') + return redirect(url_for('config')) + except Exception as e: + flash(f'配置保存失败: {str(e)}') + + # 读取配置 + try: + import sys + sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + import config + + config_data = { + 'data_adapter_type': getattr(config, 'DATA_ADAPTER_TYPE', 'tqsdk'), + 'tqsdk_username': getattr(config, 'TQSDK_USERNAME', ''), + 'tqsdk_password': getattr(config, 'TQSDK_PASSWORD', ''), + 'rqdata_username': getattr(config, 'RQDATA_USERNAME', ''), + 'rqdata_password': getattr(config, 'RQDATA_PASSWORD', ''), + 'debug': getattr(config, 'DEBUG', False), + 'enable_cache': getattr(config, 'ENABLE_CACHE', True), + 'cache_expiry': getattr(config, 'CACHE_EXPIRY', 3600), + 'default_ai_model': getattr(config, 'DEFAULT_AI_MODEL', 'deepseek'), + 'ai_api_key': getattr(config, 'AI_API_KEY', '') + } + except Exception as e: + flash(f'读取配置失败: {str(e)}') + config_data = { + 'data_adapter_type': 'tqsdk', + 'tqsdk_username': '', + 'tqsdk_password': '', + 'rqdata_username': '', + 'rqdata_password': '', + 'debug': False, + 'enable_cache': True, + 'cache_expiry': 3600, + 'default_ai_model': 'deepseek', + 'ai_api_key': '' + } + + return render_template('config.html', **config_data) + if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=5000)