Spaces:
Running
Running
| from flask import Flask, render_template, redirect, url_for, flash, request | |
| from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user | |
| from flask_sqlalchemy import SQLAlchemy | |
| from flask_wtf import FlaskForm | |
| from wtforms import StringField, PasswordField, SubmitField | |
| from wtforms.validators import DataRequired, Length, Email | |
| from werkzeug.security import generate_password_hash, check_password_hash | |
| import os | |
| import pandas as pd | |
| app = Flask(__name__) | |
| app.config.from_object('config.Config') | |
| db = SQLAlchemy(app) | |
| login_manager = LoginManager(app) | |
| login_manager.login_view = 'login' | |
| class User(UserMixin, db.Model): | |
| id = db.Column(db.Integer, primary_key=True) | |
| username = db.Column(db.String(150), unique=True, nullable=False) | |
| email = db.Column(db.String(150), unique=True, nullable=False) | |
| password = db.Column(db.String(150), nullable=False) | |
| class UploadedFile(db.Model): | |
| id = db.Column(db.Integer, primary_key=True) | |
| filename = db.Column(db.String(150), nullable=False) | |
| user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) | |
| def load_user(user_id): | |
| return User.query.get(int(user_id)) | |
| class LoginForm(FlaskForm): | |
| email = StringField('Email', validators=[DataRequired(), Email()]) | |
| password = PasswordField('Password', validators=[DataRequired()]) | |
| submit = SubmitField('Login') | |
| class RegistrationForm(FlaskForm): | |
| username = StringField('Username', validators=[DataRequired(), Length(min=2, max=150)]) | |
| email = StringField('Email', validators=[DataRequired(), Email()]) | |
| password = PasswordField('Password', validators=[DataRequired()]) | |
| submit = SubmitField('Sign Up') | |
| def home(): | |
| return render_template('home.html') | |
| def register(): | |
| form = RegistrationForm() | |
| if form.validate_on_submit(): | |
| hashed_password = generate_password_hash(form.password.data, method='sha256') | |
| new_user = User(username=form.username.data, email=form.email.data, password=hashed_password) | |
| db.session.add(new_user) | |
| db.session.commit() | |
| flash('Your account has been created! You can now log in.', 'success') | |
| return redirect(url_for('login')) | |
| return render_template('register.html', form=form) | |
| def login(): | |
| form = LoginForm() | |
| if form.validate_on_submit(): | |
| user = User.query.filter_by(email=form.email.data).first() | |
| if user and check_password_hash(user.password, form.password.data): | |
| login_user(user) | |
| return redirect(url_for('dashboard')) | |
| else: | |
| flash('Login Unsuccessful. Please check email and password', 'danger') | |
| return render_template('login.html', form=form) | |
| def logout(): | |
| logout_user() | |
| return redirect(url_for('home')) | |
| def dashboard(): | |
| if request.method == 'POST': | |
| if 'file' not in request.files: | |
| flash('No file part') | |
| return redirect(request.url) | |
| file = request.files['file'] | |
| if file.filename == '': | |
| flash('No selected file') | |
| return redirect(request.url) | |
| if file: | |
| filename = file.filename | |
| filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename) | |
| file.save(filepath) | |
| # Process the file with pandas | |
| data = pd.read_excel(filepath) | |
| insights = data.describe().to_html() | |
| # Save file record to database | |
| new_file = UploadedFile(filename=filename, user_id=current_user.id) | |
| db.session.add(new_file) | |
| db.session.commit() | |
| return render_template('dashboard.html', insights=insights) | |
| return render_template('dashboard.html') | |
| if __name__ == '__main__': | |
| if not os.path.exists(app.config['UPLOAD_FOLDER']): | |
| os.makedirs(app.config['UPLOAD_FOLDER']) | |
| with app.app_context(): | |
| db.create_all() | |
| app.run(debug=True) | |