flask_login使用peewee的方法

  • 2025-03-26 11:34:37
  • 开发
  • 31
  • shevechco

之前实际写过一篇flask_login库的用法,是使用的sqlalchemy,可以查看我之前的笔记:https://sulao.cn/post/669,这次换成peewee以后,就再记录下使用的方法,大致和之前一致,需要注意的一些细节

主要是在表对象定义的时候继承UserMixin这个模型,所以我们需要在登录用户的表对象上添加继承,配置如下:

from flask_login import UserMixin
#用户表 class BUser(BaseModel, UserMixin): id = AutoField() create_id = SmallIntegerField(index=True) name = CharField(max_length=50) account = CharField(index=True, max_length=50) passwd = CharField(max_length=50) level = SmallIntegerField(default=0, index=True) status = SmallIntegerField(default=0, index=True) face_img = CharField(max_length=255) email = CharField(max_length=50) remote_ip = CharField(max_length=15) intro = TextField() create_time = DateTimeField(index=True, formats='%Y-%m-%d %H:%M:%S', default=datetime.datetime.now) update_time = DateTimeField(index=True, formats='%Y-%m-%d %H:%M:%S')

#验证登录密码, password是传入的明文密码 @staticmethod def check_passwd(bpasswd, password): hash = hashlib.md5() hash.update(password.encode('utf-8')) if bpasswd == hash.hexdigest(): return True

def get_id(self): return str(self.id)

另外在这个对象下面添加了个方法,一个是静态方法,检测密码,另外一个get_id方法是重写的,由于我这里id和实际要载入的ID一致可以去掉,如果不一致需要在这里返回实际的ID名字

然后需要在登录成功的地方将用户数据载入login_user这个方法中

user_info = BUser.get(BUser.account == account)
login_user(user_info)

最后还需要将用户数据载入loginmanager中,定义一个函数,使用@loginmanager.user_loader装饰器装饰,这里的user_id实际是拿到上面的get_id方法返回的ID,这个需要注意。

#载入用户数据到loginmanager
@loginmanager.user_loader
def load_user(user_id):
    return BUser.get(BUser.id == user_id)

工厂函数中的是这样写的

from flask_login import LoginManager
loginmanager = LoginManager()
#将下面的实例通过init_app延迟挂载到flask实例中
loginmanager.init_app(app)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.sulao.cn/post/1006

相关推荐