Files
ppt/ppt_manager/app.py

75 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from flask import Flask, render_template, jsonify, send_file, request
from pathlib import Path
import sys
import os
sys.path.insert(0, str(Path(__file__).parent / "src"))
from src.ppt_generator import PPTGenerator
from loguru import logger
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
@app.template_filter('count_item')
def count_item(lst, item):
return lst.count(item)
generator = PPTGenerator()
@app.route('/')
def index():
projects = generator.list_projects()
return render_template('index.html', projects=projects)
@app.route('/api/projects')
def list_projects():
projects = generator.list_projects()
return jsonify({'success': True, 'projects': projects})
@app.route('/api/generate/<project_name>', methods=['POST'])
def generate_ppt(project_name):
try:
output_path = generator.generate_project(project_name)
if output_path:
filename = os.path.basename(output_path)
return jsonify({
'success': True,
'message': 'PPT生成成功',
'filename': filename,
'download_url': f'/download/{filename}'
})
else:
return jsonify({'success': False, 'message': 'PPT生成失败请查看日志'})
except Exception as e:
logger.exception(f"生成PPT时发生错误: {e}")
return jsonify({'success': False, 'message': str(e)})
@app.route('/download/<filename>')
def download_file(filename):
output_dir = Path(__file__).parent / "output"
file_path = output_dir / filename
if file_path.exists():
return send_file(str(file_path), as_attachment=True)
return jsonify({'success': False, 'message': '文件不存在'})
@app.route('/api/files')
def list_files():
output_dir = Path(__file__).parent / "output"
files = []
if output_dir.exists():
for f in sorted(output_dir.glob("*.pptx"), reverse=True):
files.append({
'name': f.name,
'size': round(f.stat().st_size / 1024 / 1024, 2),
'modified': f.stat().st_mtime
})
return jsonify({'success': True, 'files': files})
if __name__ == '__main__':
print("\n" + "="*60)
print("PPT管理系统 Web 界面启动中...")
print("请在浏览器中打开: http://localhost:5000")
print("="*60 + "\n")
app.run(debug=True, host='0.0.0.0', port=5000)