flask_crud_app/routes/upload.py

37 lines
1.3 KiB
Python

from flask import Blueprint, request, render_template, redirect
from models import Asset, db
upload_bp = Blueprint('uploadcsv', __name__)
@upload_bp.route('/uploadcsv', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
# Check if a file was uploaded
if 'file' not in request.files:
flash("No file uploaded.", 'error')
return redirect(url_for('upload_file'))
file = request.files['file']
# Check if the file is a CSV
if file.filename == '' or not file.filename.endswith('.csv'):
flash("Please upload a valid CSV file.", 'error')
return redirect(url_for('upload_file'))
try:
# Process the CSV file
assets = process_csv(file)
# Store the processed data in the session for preview
session['csv_data'] = [asset.__dict__ for asset in assets]
# Redirect to preview page
return redirect(url_for('csv_preview'))
except Exception as e:
# Handle errors during file processing
flash(f"Error processing CSV file: {str(e)}", 'error')
return redirect(url_for('upload_file'))
# Render the upload page for GET requests
return render_template('upload.html')