|
|
|
|
@ -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)
|
|
|
|
|
|