· 7 years ago · Sep 10, 2018, 11:22 AM
1#!flask/bin/python
2
3from flask import Flask, Response, redirect, url_for, request, session, abort
4from flask_login import LoginManager, UserMixin, \
5 login_required, login_user, logout_user
6
7app = Flask(__name__)
8
9# config
10app.config.update(
11 DEBUG = True,
12 SECRET_KEY = 'secret_xxx'
13)
14
15# flask-login
16login_manager = LoginManager()
17login_manager.init_app(app)
18login_manager.login_view = "login"
19
20
21# silly user model
22class User(UserMixin):
23
24 def __init__(self, id):
25 self.id = id
26 self.name = "user" + str(id)
27 self.password = self.name + "_secret"
28
29 def __repr__(self):
30 return "%d/%s/%s" % (self.id, self.name, self.password)
31
32class MyUser(UserMixin):
33 def __init__(self, id, password):
34 self.id = id
35 self.password = password
36 def __repr__(self):
37 return "%s/%s" % (self.id, self.password)
38
39
40# create some users with ids 1 to 20
41users = [User(id) for id in range(1, 21)]
42
43
44# some protected url
45@app.route('/')
46@login_required
47def home():
48 return Response("Hello World!")
49
50
51# somewhere to login
52@app.route("/login", methods=["GET", "POST"])
53def login():
54 if request.method == 'POST':
55 username = request.form['username']
56 password = request.form['password']
57 if password == username + "_secret":
58 id = username.split('user')[1]
59 user = User(id)
60 login_user(user)
61 return redirect(request.args.get("next"))
62 else:
63 return abort(401)
64 else:
65 return Response('''
66 <form action="" method="post">
67 <p><input type=text name=username>
68 <p><input type=password name=password>
69 <p><input type=submit value=Login>
70 </form>
71 ''')
72
73
74# somewhere to logout
75@app.route("/logout")
76@login_required
77def logout():
78 logout_user()
79 return Response('<p>Logged out</p>')
80
81
82# handle login failed
83@app.errorhandler(401)
84def page_not_found(e):
85 return Response('<p>Login failed</p>')
86
87
88# callback to reload the user object
89@login_manager.user_loader
90def load_user(userid):
91 return User(userid)
92
93
94if __name__ == "__main__":
95 app.run(host='0.0.0.0', port=5000, debug=True)