Flask-login 例子
################################################################################
from flask.ext.login import LoginManager, login_required, UserMixin, login_user, logout_user, current_user
from flask import session,g
@app.before_request
def before_request():
g.user = current_user
app.secret_key = 's3cr3t'
login_manager = LoginManager()
login_manager.session_protection = 'strong'
login_manager.login_view = 'xlogin'
login_manager.init_app(app)
class User(UserMixin):
@property
def is_authenticated(self):
return True
@property
def is_actice(self):
return True
@property
def is_anonymous(self):
return False
def get_id(self):
return "100"
@login_manager.user_loader
def load_user(user_id):
user = User()
return user
@app.route('/xlogin', methods=['GET', 'POST'])
def xlogin():
if g.user is not None and g.user.is_authenticated:
return redirect(url_for('index'))
form = LoginForm2()
if form.validate_on_submit():
flash('%s %s %s' %(form.username.data, form.password.data, form.remember_me.data))
if form.username.data == "sysnap" and form.password.data == "sysnap":
user = User()
login_user(user)
return redirect('/index')
return render_template('loginform.html',
title='login',
form=form)
@app.route('/xlogout', methods=['GET', 'POST'])
def xlogout():
logout_user()
return "logout page"
@app.route('/xtest')
@login_required
def xtest():
return "yes , you are allowed"
form定义为
class LoginForm2(Form):
username = StringField('name', validators=[DataRequired()])
password = PasswordField('password', validators=[validators.Required()])
remember_me = BooleanField('remember', default=False)
submit = SubmitField('Submit')
HTML
<!-- extend from base layout -->
{% extends "base.html" %}
{% block content %}
<h1>{{title}}</h1>
<form action="" method="post" name="loginform">
{{ form.hidden_tag() }}
<p>
{{ form.username.label }} {{ form.username() }}
{% for error in form.username.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form.password.label }} {{ form.password() }}
{% for error in form.password.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form.remember_me }} remember</p>
{% for error in form.remember_me.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}<br>
<p>
{{ form.submit() }}
</p>
</form>
{% endblock %}