Back to snippets

flask_login_quickstart_user_model_and_protected_routes.py

python

A 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()