harshdhane commited on
Commit
ab79ca3
·
verified ·
1 Parent(s): a8a001c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +153 -153
app.py CHANGED
@@ -1,153 +1,153 @@
1
- from flask import Flask, render_template, request, redirect, url_for, session, flash, send_from_directory
2
- from werkzeug.utils import secure_filename
3
- from werkzeug.security import generate_password_hash, check_password_hash
4
- import os
5
- from datetime import datetime
6
- from models import db, User, Resource
7
-
8
- app = Flask(__name__)
9
- app.config['SECRET_KEY'] = 'your_secret_key_here'
10
- app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///resource_management.db'
11
- app.config['UPLOAD_FOLDER'] = 'uploads'
12
- app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
13
-
14
- db.init_app(app)
15
-
16
- # Ensure uploads folder exists
17
- if not os.path.exists(app.config['UPLOAD_FOLDER']):
18
- os.makedirs(app.config['UPLOAD_FOLDER'])
19
-
20
- # Create database tables automatically
21
- with app.app_context():
22
- db.create_all()
23
-
24
- @app.route('/')
25
- def index():
26
- if 'username' not in session:
27
- return redirect(url_for('login'))
28
- username = session['username']
29
- user_type = session['user_type']
30
- resource_count = Resource.query.count()
31
- last_login = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
32
- return render_template('index.html', username=username, user_type=user_type, resource_count=resource_count, last_login=last_login)
33
-
34
- @app.route('/login', methods=['GET', 'POST'])
35
- def login():
36
- if request.method == 'POST':
37
- username = request.form['username']
38
- password = request.form['password']
39
- user_type = request.form['user_type']
40
-
41
- user = User.query.filter_by(username=username, user_type=user_type).first()
42
- if user and check_password_hash(user.password, password):
43
- session['username'] = user.username
44
- session['user_type'] = user.user_type
45
- return redirect(url_for('index'))
46
- else:
47
- flash('Invalid username, password, or user type.', 'error')
48
- return render_template('login.html')
49
-
50
- @app.route('/signup', methods=['GET', 'POST'])
51
- def signup():
52
- if request.method == 'POST':
53
- username = request.form['username']
54
- password = request.form['password']
55
- confirm_password = request.form['confirm_password']
56
- user_type = request.form['user_type']
57
-
58
- if password != confirm_password:
59
- flash('Passwords do not match!', 'error')
60
- return redirect(url_for('signup'))
61
-
62
- existing_user = User.query.filter_by(username=username).first()
63
- if existing_user:
64
- flash('Username already exists.', 'error')
65
- return redirect(url_for('signup'))
66
-
67
- hashed_password = generate_password_hash(password)
68
- new_user = User(username=username, password=hashed_password, user_type=user_type)
69
- db.session.add(new_user)
70
- db.session.commit()
71
- flash('Account created successfully. Please log in.', 'success')
72
- return redirect(url_for('login'))
73
- return render_template('signup.html')
74
-
75
- @app.route('/logout')
76
- def logout():
77
- session.clear()
78
- return redirect(url_for('login'))
79
-
80
- @app.route('/view_resources', methods=['GET', 'POST'])
81
- def view_resources():
82
- if 'username' not in session:
83
- return redirect(url_for('login'))
84
- user_type = session['user_type']
85
-
86
- institutions = db.session.query(Resource.institution).distinct()
87
- resource_types = db.session.query(Resource.type).distinct()
88
-
89
- filters = {}
90
- if request.method == 'POST':
91
- if 'delete_resource' in request.form and user_type == 'admin':
92
- resource_id = request.form['delete_resource']
93
- resource = Resource.query.get(resource_id)
94
- if resource:
95
- try:
96
- os.remove(os.path.join(app.config['UPLOAD_FOLDER'], resource.resource_file))
97
- except FileNotFoundError:
98
- pass
99
- db.session.delete(resource)
100
- db.session.commit()
101
- flash('Resource deleted successfully.', 'success')
102
- else:
103
- flash('Resource not found.', 'error')
104
- return redirect(url_for('view_resources'))
105
-
106
- filters['institution'] = request.form.get('institution')
107
- filters['department'] = request.form.get('department')
108
- filters['resource_type'] = request.form.get('resource_type')
109
-
110
- query = Resource.query
111
- if filters.get('institution'):
112
- query = query.filter_by(institution=filters['institution'])
113
- if filters.get('department'):
114
- query = query.filter_by(department=filters['department'])
115
- if filters.get('resource_type'):
116
- query = query.filter_by(type=filters['resource_type'])
117
-
118
- resources = query.all()
119
-
120
- departments = []
121
- if filters.get('institution'):
122
- departments = db.session.query(Resource.department).filter_by(institution=filters['institution']).distinct()
123
-
124
- return render_template('view_resources.html', resources=resources, institutions=institutions, departments=departments, resource_types=resource_types, user_type=user_type, filters=filters)
125
-
126
- @app.route('/add_resource', methods=['GET', 'POST'])
127
- def add_resource():
128
- if 'username' not in session or session['user_type'] != 'admin':
129
- return redirect(url_for('login'))
130
- if request.method == 'POST':
131
- name = request.form['name']
132
- type = request.form['type']
133
- institution = request.form['institution']
134
- department = request.form['department']
135
- resource_file = request.files['resource_file']
136
-
137
- if resource_file:
138
- filename = secure_filename(resource_file.filename)
139
- resource_file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
140
-
141
- new_resource = Resource(name=name, type=type, institution=institution, department=department, resource_file=filename)
142
- db.session.add(new_resource)
143
- db.session.commit()
144
- flash('Resource added successfully!', 'success')
145
- return redirect(url_for('view_resources'))
146
- return render_template('add_resource.html')
147
-
148
- @app.route('/uploads/<filename>')
149
- def uploaded_file(filename):
150
- return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
151
-
152
- if __name__ == '__main__':
153
- app.run(debug=True)
 
1
+ from flask import Flask, render_template, request, redirect, url_for, session, flash, send_from_directory
2
+ from werkzeug.utils import secure_filename
3
+ from werkzeug.security import generate_password_hash, check_password_hash
4
+ import os
5
+ from datetime import datetime
6
+ from models import db, User, Resource
7
+
8
+ app = Flask(__name__)
9
+ app.config['SECRET_KEY'] = 'your_secret_key_here'
10
+ app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///resource_management.db'
11
+ app.config['UPLOAD_FOLDER'] = 'uploads'
12
+ app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
13
+
14
+ db.init_app(app)
15
+
16
+ # Ensure uploads folder exists
17
+ if not os.path.exists(app.config['UPLOAD_FOLDER']):
18
+ os.makedirs(app.config['UPLOAD_FOLDER'])
19
+
20
+ # Create database tables automatically
21
+ with app.app_context():
22
+ db.create_all()
23
+
24
+ @app.route('/')
25
+ def index():
26
+ if 'username' not in session:
27
+ return redirect(url_for('login'))
28
+ username = session['username']
29
+ user_type = session['user_type']
30
+ resource_count = Resource.query.count()
31
+ last_login = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
32
+ return render_template('index.html', username=username, user_type=user_type, resource_count=resource_count, last_login=last_login)
33
+
34
+ @app.route('/login', methods=['GET', 'POST'])
35
+ def login():
36
+ if request.method == 'POST':
37
+ username = request.form['username']
38
+ password = request.form['password']
39
+ user_type = request.form['user_type']
40
+
41
+ user = User.query.filter_by(username=username, user_type=user_type).first()
42
+ if user and check_password_hash(user.password, password):
43
+ session['username'] = user.username
44
+ session['user_type'] = user.user_type
45
+ return redirect(url_for('index'))
46
+ else:
47
+ flash('Invalid username, password, or user type.', 'error')
48
+ return render_template('login.html')
49
+
50
+ @app.route('/signup', methods=['GET', 'POST'])
51
+ def signup():
52
+ if request.method == 'POST':
53
+ username = request.form['username']
54
+ password = request.form['password']
55
+ confirm_password = request.form['confirm_password']
56
+ user_type = request.form['user_type']
57
+
58
+ if password != confirm_password:
59
+ flash('Passwords do not match!', 'error')
60
+ return redirect(url_for('signup'))
61
+
62
+ existing_user = User.query.filter_by(username=username).first()
63
+ if existing_user:
64
+ flash('Username already exists.', 'error')
65
+ return redirect(url_for('signup'))
66
+
67
+ hashed_password = generate_password_hash(password)
68
+ new_user = User(username=username, password=hashed_password, user_type=user_type)
69
+ db.session.add(new_user)
70
+ db.session.commit()
71
+ flash('Account created successfully. Please log in.', 'success')
72
+ return redirect(url_for('login'))
73
+ return render_template('signup.html')
74
+
75
+ @app.route('/logout')
76
+ def logout():
77
+ session.clear()
78
+ return redirect(url_for('login'))
79
+
80
+ @app.route('/view_resources', methods=['GET', 'POST'])
81
+ def view_resources():
82
+ if 'username' not in session:
83
+ return redirect(url_for('login'))
84
+ user_type = session['user_type']
85
+
86
+ institutions = db.session.query(Resource.institution).distinct()
87
+ resource_types = db.session.query(Resource.type).distinct()
88
+
89
+ filters = {}
90
+ if request.method == 'POST':
91
+ if 'delete_resource' in request.form and user_type == 'admin':
92
+ resource_id = request.form['delete_resource']
93
+ resource = Resource.query.get(resource_id)
94
+ if resource:
95
+ try:
96
+ os.remove(os.path.join(app.config['UPLOAD_FOLDER'], resource.resource_file))
97
+ except FileNotFoundError:
98
+ pass
99
+ db.session.delete(resource)
100
+ db.session.commit()
101
+ flash('Resource deleted successfully.', 'success')
102
+ else:
103
+ flash('Resource not found.', 'error')
104
+ return redirect(url_for('view_resources'))
105
+
106
+ filters['institution'] = request.form.get('institution')
107
+ filters['department'] = request.form.get('department')
108
+ filters['resource_type'] = request.form.get('resource_type')
109
+
110
+ query = Resource.query
111
+ if filters.get('institution'):
112
+ query = query.filter_by(institution=filters['institution'])
113
+ if filters.get('department'):
114
+ query = query.filter_by(department=filters['department'])
115
+ if filters.get('resource_type'):
116
+ query = query.filter_by(type=filters['resource_type'])
117
+
118
+ resources = query.all()
119
+
120
+ departments = []
121
+ if filters.get('institution'):
122
+ departments = db.session.query(Resource.department).filter_by(institution=filters['institution']).distinct()
123
+
124
+ return render_template('view_resources.html', resources=resources, institutions=institutions, departments=departments, resource_types=resource_types, user_type=user_type, filters=filters)
125
+
126
+ @app.route('/add_resource', methods=['GET', 'POST'])
127
+ def add_resource():
128
+ if 'username' not in session or session['user_type'] != 'admin':
129
+ return redirect(url_for('login'))
130
+ if request.method == 'POST':
131
+ name = request.form['name']
132
+ type = request.form['type']
133
+ institution = request.form['institution']
134
+ department = request.form['department']
135
+ resource_file = request.files['resource_file']
136
+
137
+ if resource_file:
138
+ filename = secure_filename(resource_file.filename)
139
+ resource_file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
140
+
141
+ new_resource = Resource(name=name, type=type, institution=institution, department=department, resource_file=filename)
142
+ db.session.add(new_resource)
143
+ db.session.commit()
144
+ flash('Resource added successfully!', 'success')
145
+ return redirect(url_for('view_resources'))
146
+ return render_template('add_resource.html')
147
+
148
+ @app.route('/uploads/<filename>')
149
+ def uploaded_file(filename):
150
+ return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
151
+
152
+ if __name__ == '__main__':
153
+ app.run(host='0.0.0.0', port=7860, debug=True)