· 9 years ago · Mar 08, 2017, 01:34 PM
1from flask import Flask, render_template, request, session, redirect, url_for, json
2import os
3from utils import accountManager, initialize
4
5cache = {}
6
7app = Flask(__name__)
8# Create secret key if it doesn't exist
9with open("utils/key", "a+b") as f:
10 secret_key = f.read()
11 if not secret_key:
12 secret_key = os.urandom(64)
13 f.write(secret_key)
14 f.flush()
15 app.secret_key = secret_key
16
17# home route
18@app.route("/")
19def index():
20 if "username" in session:
21 return redirect("/loggedIn")
22 else:
23 return render_template("loginOrReg.html")
24
25# diplayed when logged in
26@app.route("/loggedIn")
27def loggedIn():
28 if "username" in session:
29 return render_template("loggedIn.html")
30 else:
31 return redirect("/")
32
33# login route
34@app.route("/login", methods=["POST"])
35def login():
36 form = request.form
37 username = form["username"]
38 password = form["password"]
39 success, message = accountManager.authenticate(username, password)
40 if success:
41 session["username"] = username
42 return redirect("/")
43 return render_template("loginOrReg.html",status=message)
44
45# register route
46@app.route("/register", methods=["POST"])
47def register():
48 form = request.form
49 username = form["username"]
50 password = form["password"]
51 pwd = form["pwd"]
52 success, message = accountManager.register(username, password, pwd)
53 return render_template("loginOrReg.html",status=message)
54
55# logout route
56@app.route("/logout", methods=["POST", "GET"])
57def logout():
58 if "username" in session:
59 session.pop("username")
60 return render_template("loginOrReg.html",status="logged out")
61 else:
62 return redirect(url_for("index"))
63
64# Cached fibonacci function
65def get_fib(n):
66 if n in cache:
67 return cache[n]
68
69 if n <= 1:
70 cache[n] = n
71 return n
72
73 result = get_fib(n-1) + get_fib(n-2)
74 cache[n] = result
75 return result
76
77# returns fib(n) for ajax call
78@app.route("/fib", methods=["POST","GET"])
79def fib():
80 n = request.form.get("n")
81 answer = get_fib(int(n))
82 result = {"result": answer}
83 return json.dumps(result)
84
85# returns the sum of two numbers for ajax call
86@app.route("/add", methods=["POST","GET"])
87def add():
88 a = request.form.get("a")
89 b = request.form.get("b")
90 a , b = int(a), int(b)
91 answer = a + b
92 result = {"result": answer}
93 return json.dumps(result)
94
95# run
96if __name__ == "__main__":
97 initialize.initialize_tables()
98 app.debug = True
99 app.run()