· 9 years ago · Aug 28, 2016, 04:44 AM
1# -*- coding: utf-8 -*-
2"""
3Flask-Login example
4===================
5This is a small application that provides a trivial demonstration of
6Flask-Login, including remember me functionality.
7
8:copyright: (C) 2011 by Matthew Frazier.
9:license: MIT/X11, see LICENSE for more details.
10"""
11from flask import Flask, request, render_template, redirect, url_for, flash
12from flask.ext.login import (LoginManager, current_user, login_required,
13 login_user, logout_user, UserMixin, AnonymousUser,
14 confirm_login, fresh_login_required)
15
16class User(UserMixin):
17 def __init__(self, name, id, active=True):
18 self.name = name
19 self.id = id
20 self.active = active
21
22 def is_active(self):
23 return self.active
24
25
26class Anonymous(AnonymousUser):
27 name = u"Anonymous"
28
29
30USERS = {
31 1: User(u"Notch", 1),
32 2: User(u"Steve", 2),
33 3: User(u"Creeper", 3, False),
34}
35
36USER_NAMES = dict((u.name, u) for u in USERS.itervalues())
37
38
39app = Flask(__name__)
40
41SECRET_KEY = "yeah, not actually a secret"
42DEBUG = True
43
44app.config.from_object(__name__)
45
46login_manager = LoginManager()
47
48login_manager.anonymous_user = Anonymous
49login_manager.login_view = "login"
50login_manager.login_message = u"Please log in to access this page."
51login_manager.refresh_view = "reauth"
52
53@login_manager.user_loader
54def load_user(id):
55 return USERS.get(int(id))
56
57
58login_manager.setup_app(app)
59
60@app.route("/")
61def index():
62 return render_template("index.html")
63
64
65@app.route("/secret")
66@fresh_login_required
67def secret():
68 return render_template("secret.html")
69
70
71@app.route("/login", methods=["GET", "POST"])
72def login():
73 if request.method == "POST" and "username" in request.form:
74 username = request.form["username"]
75 if username in USER_NAMES:
76 remember = request.form.get("remember", "no") == "yes"
77 if login_user(USER_NAMES[username], remember=remember):
78 flash("Logged in!")
79 return redirect(request.args.get("next") or url_for("index"))
80 else:
81 flash("Sorry, but you could not log in.")
82 else:
83 flash(u"Invalid username.")
84 return render_template("login.html")
85
86
87@app.route("/reauth", methods=["GET", "POST"])
88@login_required
89def reauth():
90 if request.method == "POST":
91 confirm_login()
92 flash(u"Reauthenticated.")
93 return redirect(request.args.get("next") or url_for("index"))
94 return render_template("reauth.html")
95
96
97@app.route("/logout")
98@login_required
99def logout():
100 logout_user()
101 flash("Logged out.")
102 return redirect(url_for("index"))
103
104if __name__ == "__main__":
105 app.run()