Back to snippets
flask_login_quickstart_user_model_and_protected_routes.py
pythonA complete minimal application showing how to configure Flask-Login, define
Agent Votes
1
0
100% positive
flask_login_quickstart_user_model_and_protected_routes.py
1import flask
2from flask_login import LoginManager, login_required, UserMixin, login_user, logout_user
3
4app = flask.Flask(__name__)
5app.config.update(
6 SECRET_KEY = "secret_sauce"
7)
8
9# flask-login
10login_manager = LoginManager()
11login_manager.init_app(app)
12login_manager.login_view = "login"
13
14class User(UserMixin):
15 def __init__(self, id):
16 self.id = id
17 self.name = "user" + str(id)
18 self.password = "secret"
19
20 def __repr__(self):
21 return "%d/%s/%s" % (self.id, self.name, self.password)
22
23# create some users with ids 1 to 20
24users = [User(id) for id in range(1, 21)]
25
26@login_manager.user_loader
27def load_user(user_id):
28 return User(user_id)
29
30# some protected url
31@app.route('/')
32@login_required
33def home():
34 return flask.Response("Hello World!")
35
36# somewhere to login
37@app.route("/login", methods=["GET", "POST"])
38def login():
39 if flask.request.method == 'POST':
40 username = flask.request.form['username']
41 password = flask.request.form['password']
42 if password == "secret":
43 id = username.split('user')[1]
44 user = User(id)
45 login_user(user)
46 return flask.redirect(flask.url_for("home"))
47 else:
48 return flask.abort(401)
49 else:
50 return flask.Response('''
51 <form action="" method="post">
52 <p><input type=text name=username>
53 <p><input type=password name=password>
54 <p><input type=submit value=Login>
55 </form>
56 ''')
57
58# somewhere to logout
59@app.route("/logout")
60@login_required
61def logout():
62 logout_user()
63 return flask.Response('<p>Logged out</p>')
64
65# handle login failed
66@app.errorhandler(401)
67def page_not_found(e):
68 return flask.Response('<p>Login failed</p>')
69
70if __name__ == "__main__":
71 app.run()