栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Flask # Flask-Login登陆组件使用介绍

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flask # Flask-Login登陆组件使用介绍

pip install flask-login

flask-login使用需要有user对象。user对象必须实现下面的几个属性和方法。

属性/方法说明
is_authenticated如果用户提供的登陆凭据有效,返回True,否则False
is_active如果允许用户登陆,必须返回True,否则返回False
is_anonymous对普通用户必须返回False,如果是表示匿名登陆的特殊用户对象必须返回True
get_id()返回用户的唯一标识符,unicode编码字符串

更简单的替代方案:UserMixin类

from . import db
from werkzeug.security import generate_password_hash, check_password_hash

from flask_login import UserMixin

class User(UserMixin,db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key = True)
    email = db.Column(db.String(64), unique=True, info='邮箱')
    username = db.Column(db.String(64), nullable=False, unique=True, info='账户')
    password_hash = db.Column(db.String(128))
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
    
    def __init__(self, username=None, password=None, status='active'):
        self.username = username
        self.password = password
        self.status = status
        
    def __repr__(self):
        return '' % self.username
    
    @property
    def password(self):
        raise AttributeError('password is not a readable attribute')
    
    @password.setter
    def password(self, password):
        self.password_hash = generate_password_hash(password)
        
    def verify_password(self, password):
        return check_password_hash(self.password_hash, password)

flask-login在应用工厂中初始化:

from flask_login import LoginManager

login_manager = LoginManager()
login_manager.login_view = 'auth.login' # 跳转endpoint

def create_app(config):

	....
	login_manager.init_app(app)
	....
	

flask-login还要求指定一个函数,在插件需要从数据库中获得指定标识符对应的用户时使用。

@login_manager.user_loader
def load_user(user_id):
	return User.query.get(int(user_id))

装饰器把函数注册给flask-login,在这个扩展需要用户信息时调用。传给sqlalchemy查询,加载用户。

可以基于flask_login来保护路由:

frim flask_login import login_required
@app.route('/secret')
@login_required
def secret():
	return 'only anthenticated users are allowed!'

Reference
  1. 《Flask Web开发:基于Python的Web应用开发实战》
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/665705.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号