harshdhane's picture
Update app.py
ab79ca3 verified
Raw
History Blame Contribute Delete
6.1 kB
from flask import Flask, render_template, request, redirect, url_for, session, flash, send_from_directory
from werkzeug.utils import secure_filename
from werkzeug.security import generate_password_hash, check_password_hash
import os
from datetime import datetime
from models import db, User, Resource
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key_here'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///resource_management.db'
app.config['UPLOAD_FOLDER'] = 'uploads'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
# Ensure uploads folder exists
if not os.path.exists(app.config['UPLOAD_FOLDER']):
os.makedirs(app.config['UPLOAD_FOLDER'])
# Create database tables automatically
with app.app_context():
db.create_all()
@app.route('/')
def index():
if 'username' not in session:
return redirect(url_for('login'))
username = session['username']
user_type = session['user_type']
resource_count = Resource.query.count()
last_login = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
return render_template('index.html', username=username, user_type=user_type, resource_count=resource_count, last_login=last_login)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user_type = request.form['user_type']
user = User.query.filter_by(username=username, user_type=user_type).first()
if user and check_password_hash(user.password, password):
session['username'] = user.username
session['user_type'] = user.user_type
return redirect(url_for('index'))
else:
flash('Invalid username, password, or user type.', 'error')
return render_template('login.html')
@app.route('/signup', methods=['GET', 'POST'])
def signup():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
confirm_password = request.form['confirm_password']
user_type = request.form['user_type']
if password != confirm_password:
flash('Passwords do not match!', 'error')
return redirect(url_for('signup'))
existing_user = User.query.filter_by(username=username).first()
if existing_user:
flash('Username already exists.', 'error')
return redirect(url_for('signup'))
hashed_password = generate_password_hash(password)
new_user = User(username=username, password=hashed_password, user_type=user_type)
db.session.add(new_user)
db.session.commit()
flash('Account created successfully. Please log in.', 'success')
return redirect(url_for('login'))
return render_template('signup.html')
@app.route('/logout')
def logout():
session.clear()
return redirect(url_for('login'))
@app.route('/view_resources', methods=['GET', 'POST'])
def view_resources():
if 'username' not in session:
return redirect(url_for('login'))
user_type = session['user_type']
institutions = db.session.query(Resource.institution).distinct()
resource_types = db.session.query(Resource.type).distinct()
filters = {}
if request.method == 'POST':
if 'delete_resource' in request.form and user_type == 'admin':
resource_id = request.form['delete_resource']
resource = Resource.query.get(resource_id)
if resource:
try:
os.remove(os.path.join(app.config['UPLOAD_FOLDER'], resource.resource_file))
except FileNotFoundError:
pass
db.session.delete(resource)
db.session.commit()
flash('Resource deleted successfully.', 'success')
else:
flash('Resource not found.', 'error')
return redirect(url_for('view_resources'))
filters['institution'] = request.form.get('institution')
filters['department'] = request.form.get('department')
filters['resource_type'] = request.form.get('resource_type')
query = Resource.query
if filters.get('institution'):
query = query.filter_by(institution=filters['institution'])
if filters.get('department'):
query = query.filter_by(department=filters['department'])
if filters.get('resource_type'):
query = query.filter_by(type=filters['resource_type'])
resources = query.all()
departments = []
if filters.get('institution'):
departments = db.session.query(Resource.department).filter_by(institution=filters['institution']).distinct()
return render_template('view_resources.html', resources=resources, institutions=institutions, departments=departments, resource_types=resource_types, user_type=user_type, filters=filters)
@app.route('/add_resource', methods=['GET', 'POST'])
def add_resource():
if 'username' not in session or session['user_type'] != 'admin':
return redirect(url_for('login'))
if request.method == 'POST':
name = request.form['name']
type = request.form['type']
institution = request.form['institution']
department = request.form['department']
resource_file = request.files['resource_file']
if resource_file:
filename = secure_filename(resource_file.filename)
resource_file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
new_resource = Resource(name=name, type=type, institution=institution, department=department, resource_file=filename)
db.session.add(new_resource)
db.session.commit()
flash('Resource added successfully!', 'success')
return redirect(url_for('view_resources'))
return render_template('add_resource.html')
@app.route('/uploads/<filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860, debug=True)