/
app.py
136 lines (116 loc) · 4.55 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
from flask import Flask, render_template, request, redirect, url_for, flash, send_from_directory
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required, current_user
from werkzeug.security import generate_password_hash, check_password_hash
from werkzeug.utils import secure_filename
import os
# Initialize Flask App
app = Flask(__name__)
app.config['SECRET_KEY'] = 'YourSecretKey'
app.config['UPLOAD_FOLDER'] = 'uploads'
# Flask-Login Setup
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'
# Static User Data
users = {
"doctor": {"password": generate_password_hash("doctor123"), "role": "doctor"},
"student": {"password": generate_password_hash("student123"), "role": "student"}
}
# Temporary storage for feedback (in a real app, use a database)
feedback_data = {}
class User(UserMixin):
def __init__(self, username):
self.id = username
self.role = users[username]['role']
@login_manager.user_loader
def load_user(user_id):
if user_id in users:
return User(user_id)
# Routes
@app.route('/')
@login_required
def index():
return render_template('index.html', role=current_user.role)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if username in users and check_password_hash(users[username]['password'], password):
user = User(username)
login_user(user)
return redirect(url_for('index'))
else:
flash('Invalid username or password')
return render_template('login.html')
@app.route('/logout')
def logout():
logout_user()
return redirect(url_for('login'))
@app.route('/upload', methods=['GET', 'POST'])
@login_required
def upload_file():
if current_user.role == 'student':
if request.method == 'POST':
file = request.files['file']
if file:
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('index'))
return render_template('upload.html', role=current_user.role)
else:
flash('Only students can upload images.')
return redirect(url_for('index'))
@app.route('/my_images')
@login_required
def my_images():
if current_user.role == 'student':
image_files = os.listdir(app.config['UPLOAD_FOLDER'])
images_feedback = [(file, feedback_data.get(file, "No feedback yet."))
for file in image_files]
return render_template('my_images.html', images_feedback=images_feedback)
else:
flash('Only students can view their images.')
return redirect(url_for('index'))
@app.route('/view_images')
@login_required
def view_images():
if current_user.role == 'doctor':
image_files = os.listdir(app.config['UPLOAD_FOLDER'])
image_urls = [url_for('uploaded_file', filename=file) for file in image_files]
return render_template('view_images.html', image_urls=image_urls)
else:
flash('Only doctors can view images.')
return redirect(url_for('index'))
@app.route('/uploads/<filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
# Updated feedback route to store feedback
@app.route('/feedback/<filename>', methods=['GET', 'POST'])
@login_required
def feedback(filename):
if current_user.role == 'doctor':
if request.method == 'POST':
feedback = request.form.get('feedback')
feedback_data[filename] = feedback # Store feedback
flash(f'Feedback submitted for {filename}')
return redirect(url_for('view_images'))
return render_template('feedback.html', filename=filename)
else:
flash('Only doctors can provide feedback.')
return redirect(url_for('index'))
# New route for students to view feedback
@app.route('/view_feedback/<filename>')
@login_required
def view_feedback(filename):
if current_user.role == 'student':
image_feedback = feedback_data.get(filename, "No feedback yet.")
return render_template('view_feedback.html', filename=filename, feedback=image_feedback)
else:
flash('Only students can view feedback.')
return redirect(url_for('index'))
if __name__ == '__main__':
# Ensure upload folder exists
if not os.path.exists(app.config['UPLOAD_FOLDER']):
os.makedirs(app.config['UPLOAD_FOLDER'])
app.run(debug=True)