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)
内容版权声明:除非注明,否则皆为本站原创文章。