Flask @login_required保护路由

本文详细介绍了如何在Flask应用中实现保护路由,包括配置LoginManager,定义Admin模型,实现用户加载回调函数,以及创建登录视图函数。通过具体代码示例展示了如何使用login_required装饰器来限制未登录用户的访问。

使用保护路由,需要以下几个部分

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'))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值