1
+ from flask import Flask , flash , render_template , request , redirect , session
2
+ from cs50 import SQL
3
+ from tempfile import mkdtemp
4
+ from helpers import login_required
5
+ from werkzeug .security import check_password_hash , generate_password_hash
6
+ from flask_session import Session
7
+
8
+ app = Flask (__name__ )
9
+
10
+ app .config ["TEMPLATES_AUTO_RELOAD" ] = True
11
+
12
+ app .config ["SESSION_FILE_DIR" ] = mkdtemp ()
13
+ app .config ["SESSION_PERMANENT" ] = False
14
+ app .config ["SESSION_TYPE" ] = "filesystem"
15
+ Session (app )
16
+
17
+ db = SQL ("sqlite:///maindb.db" )
18
+
19
+ @app .after_request
20
+ def after_request (response ):
21
+ response .headers ["Cache-Control" ] = "no-cache, no-store, must-revalidate"
22
+ response .headers ["Expires" ] = 0
23
+ response .headers ["Pragma" ] = "no-cache"
24
+ return response
25
+
26
+
27
+ @app .route ("/" )
28
+ def index ():
29
+ return render_template ("index.html" )
30
+
31
+
32
+ @app .route ("/login" , methods = ["GET" , "POST" ])
33
+ def login ():
34
+ session .clear ()
35
+ if request .method == "GET" :
36
+ return render_template ("login.html" )
37
+
38
+ if not request .form .get ("username" ):
39
+ flash ("Please provide a username" )
40
+ return redirect ("/login" )
41
+
42
+ elif not request .form .get ("password" ):
43
+ flash ("Kindly enter a password" )
44
+ return redirect ("/login" )
45
+
46
+ rows = db .execute ("SELECT * FROM users WHERE username = :username" ,
47
+ username = request .form .get ("username" ))
48
+ if len (rows ) != 1 or not check_password_hash (rows [0 ]["hash" ], request .form .get ("password" )):
49
+ flash ("Invalid username and/or password!" )
50
+ return redirect ("/login" )
51
+ session ["user_id" ] = rows [0 ]["id" ]
52
+ flash ("You have successfully logged in." )
53
+ return redirect ("/home" )
54
+
55
+
56
+
57
+ @app .route ("/register" , methods = ["GET" , "POST" ])
58
+ def register ():
59
+ if request .method == "GET" :
60
+ return render_template ("register.html" )
61
+
62
+ if not request .form .get ("fname" ):
63
+ flash ("Enter your name." )
64
+ return redirect ("/register" )
65
+
66
+ if not request .form .get ("username" ):
67
+ flash ("Username field is blank!" )
68
+ return redirect ("/register" )
69
+
70
+ elif not request .form .get ("password" ):
71
+ flash ("Password field is blank!" )
72
+ return redirect ("/register" )
73
+
74
+ elif request .form .get ("password" ) != request .form .get ("confirmpass" ):
75
+ flash ("Passwords do not match!" )
76
+ return redirect ("/register" )
77
+ else :
78
+ hashpwd = generate_password_hash (request .form .get ("password" ))
79
+ musrs = db .execute ("SELECT * FROM users WHERE username=:username" ,
80
+ username = request .form .get ("username" ))
81
+ if len (musrs ) != 0 :
82
+ flash ("Username not available!" )
83
+ return redirect ("/register" )
84
+ resp = db .execute ("INSERT INTO users(fullname, usertype, semester, username, hash, lab1, lab2) VALUES(:fullname, :usertype, :semester,:username, :hash, :lab1, :lab2)" , fullname = request .form .get ("fname" ), usertype = "student" , semester = request .form .get ("semester" ), username = request .form .get ("username" ), hash = hashpwd , lab1 = 0 , lab2 = 0 )
85
+ session ["user_id" ] = resp
86
+ return redirect ("/home" )
87
+
88
+
89
+ @app .route ("/logout" )
90
+ def logout ():
91
+ session .clear ()
92
+ flash ("You have successfully logged out." )
93
+ return redirect ("/login" )
94
+
95
+
96
+ @app .route ("/home" )
97
+ @login_required
98
+ def home ():
99
+ fname = db .execute ("SELECT fullname FROM users WHERE id=:cid" ,
100
+ cid = session ["user_id" ])[0 ]["fullname" ]
101
+ lab1 = db .execute ("SELECT lab1 FROM users WHERE id=:cid" , cid = session ["user_id" ])[0 ]["lab1" ]
102
+ lab2 = db .execute ("SELECT lab2 FROM users WHERE id=:cid" , cid = session ["user_id" ])[0 ]["lab2" ]
103
+ return render_template ("home.html" ,fname = fname ,lab1 = str (lab1 ),lab2 = str (lab2 ))
104
+
105
+
106
+ @app .route ("/expa1" )
107
+ @login_required
108
+ def expa1 ():
109
+ return render_template ("expa1.html" )
110
+
111
+
112
+ @app .route ("/expa2" )
113
+ @login_required
114
+ def expa2 ():
115
+ return render_template ("expa2.html" )
116
+
117
+
118
+ @app .route ("/expb1" )
119
+ @login_required
120
+ def expb1 ():
121
+ return render_template ("expb1.html" )
122
+
123
+
124
+ @app .route ("/expb2" )
125
+ @login_required
126
+ def expb2 ():
127
+ return render_template ("expb2.html" )
128
+
129
+
130
+ if __name__ == '__main__' :
131
+ app .run ()
0 commit comments