· 7 years ago · Nov 19, 2018, 05:38 PM
1from flask import Flask , request , abort , redirect , Response ,url_for
2from flask_login import LoginManager , login_required , UserMixin , login_user
3import pickle
4
5def save(filename, data):
6 with open(str(filename) + '.data', 'wb') as filehandle:
7 pickle.dump(data, filehandle)
8
9def load(filename):
10 with open(str(filename) + '.data', 'rb') as filehandle:
11 data = pickle.load(filehandle)
12 return data
13
14app = Flask(__name__)
15app.config['SECRET_KEY'] = 'secret_key'
16login_manager = LoginManager()
17login_manager.login_view = "login"
18login_manager.init_app(app)
19# flask-login==0.3.2
20from flask_login import LoginManager, make_secure_token
21
22class User(UserMixin):
23 def __init__(self , username , password , id , active=True):
24 self.id = id
25 self.username = username
26 self.password = password
27 self.active = active
28
29 def get_id(self):
30 return self.id
31
32 def is_active(self):
33 return self.active
34
35 def get_auth_token(self):
36 return make_secure_token(self.username , key='secret_key')
37
38class UsersRepository:
39
40 def __init__(self):
41 self.users = dict()
42 self.users_id_dict = dict()
43 self.identifier = 0
44
45 def save_user(self, user):
46
47 self.users_id_dict.setdefault(user.id, user)
48 self.users.setdefault(user.username, user)
49
50 def get_user(self, username):
51 return self.users.get(username)
52
53 def get_user_by_id(self, userid):
54 return self.users_id_dict.get(userid)
55
56 def next_index(self):
57 self.identifier +=1
58 return self.identifier
59
60users_repository = UsersRepository()
61
62@app.route('/')
63@app.route('/hello')
64def index():
65 return "<h2>Hello World</h2>"
66
67@app.route('/home')
68@login_required
69def home():
70 return "<h1>User Home</h1>"
71
72@app.route('/login' , methods=['GET' , 'POST'])
73def login():
74 if request.method == 'POST':
75 username = request.form['username']
76 password = request.form['password']
77 registeredUser = users_repository.get_user(username)
78 print('Users '+ str(users_repository.users))
79 print('Register user %s , password %s' % (registeredUser.username, registeredUser.password))
80 if registeredUser != None and registeredUser.password == password:
81 print('Logged in..')
82 login_user(registeredUser)
83 return redirect(url_for('home'))
84 else:
85 return abort(401)
86 else:
87 return Response('''
88 <form action="" method="post">
89 <p><input type=text name=username>
90 <p><input type=password name=password>
91 <p><input type=submit value=Login>
92 </form>
93 ''')
94
95@app.route('/register' , methods = ['GET' , 'POST'])
96def register():
97 if request.method == 'POST':
98 username = request.form['username']
99 password = request.form['password']
100 new_user = User(username , password , users_repository.next_index())
101 users_repository.save_user(new_user)
102 return Response("Registered Successfully")
103 else:
104 return Response('''
105 <form action="" method="post">
106 <p><input type=text name=username placeholder="Enter username">
107 <p><input type=password name=password placeholder="Enter password">
108 <p><input type=submit value=Login>
109 </form>
110 ''')
111
112# handle login failed
113@app.errorhandler(401)
114def page_not_found(e):
115 return Response('<p>Login failed</p>')
116
117# callback to reload the user object
118@login_manager.user_loader
119def load_user(userid):
120 return users_repository.get_user_by_id(userid)
121
122if __name__ == '__main__':
123 app.run(host='127.0.0.1', port=4005, debug =True)