使用保护路由,需要以下几个部分
from flask_login import UserMixin, LoginManager, login_required, login_user
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.session_protection = 'basic'
login_manager.login_view = 'login'
login_manager.login_message = u"请先登录。"
这些肯定要写的,设置一下login_manager各个属性
class Admin(UserMixin, db.Model):
__tablename__ = 'admin'
admin_id = db.Column(db.String(6), primary_key=True)
admin_name = db.Column(db.String(32))
password = db.Column(db.String(24))
right = db.Column(db.String(32))
def __init__(self, admin_id, admin_name, password, right):
self.admin_id = admin_id
self.admin_name = admin_name
self.password = password
self.right = right
def get_id(self):
return self.admin_id
def __repr__(self):
return '<Admin %r>' % self.admin_name
以上表结构,直接继承了UserMixin类,就不用再写is_authenticated,is_active,is_anonymous,get_id()这三个属性一个方法了(不过我还是重写了get_id方法,有博主说py3没有Unicode的方法啥啥的,记不清了)
@login_manager.user_loader
def load_user(admin_id):
return Admin.query.get(int(admin_id))
回调函数
@app.route('/', methods=['GET', 'POST'])
def login():
form = Login()
if form.validate_on_submit():
user = Admin.query.filter_by(admin_id=form.account.data, password=form.password.data).first()
if user is None:
flash('账号或密码错误!')
return redirect(url_for('login'))
else:
login_user(user)
session['name'] = user.admin_name
return redirect(url_for('index'))
return render_template('login.html', form=form)
视图函数,里面login_user(user)一定要写,不然不会调上面的那一堆东西
最后就可以使用保护路由了
@app.route('/index')
@login_required
def index():
return render_template('index.html', name=session.get('name'))
本文详细介绍了如何在Flask应用中实现保护路由,包括配置LoginManager,定义Admin模型,实现用户加载回调函数,以及创建登录视图函数。通过具体代码示例展示了如何使用login_required装饰器来限制未登录用户的访问。

3064

被折叠的 条评论
为什么被折叠?



