(6) 第6章:flask_login模块,登录校验和cookie设置

设置登录信息和初始化LoginManager

from flask_login import LoginManager

使用login_user把登陆信息写入cookie的时候需要把LoginManager插入到app上面

login_manager = LoginManager()
# 注册LoginManager
login_manager.init_app(app)

设置login_required权限登陆之后,若没登陆这需要跳转的界面
或者表明使用哪个试图函数实现登陆
login_view这个方法初始化后url才有next参数 表示登陆后需要跳转的界面

login_manager.login_view = 'web.login'

没登陆的时候的错误信息

login_manager.login_message = '请先登录或者注册'

login_user:登陆 设置cookie
官方文档 http://www.pythondoc.com/flask-login/
login_user中可以通过 关键字参数 remember=True 设定记住密码,
配置 REMEMBER_COOKIE_DURATION 可以设置时长(默认365天)
此外 login_user还可以通过 关键字参数 duration 设定指定时长

import datetime
duration = datetime.timedelta(seconds=30) # 30秒
duration = duration
login_user(user, remember=True, duration=duration)
login_user(user, remember=True)  # remember相当于记住密码

login_user这里是获取用户模型的id去写如到cookie
通过user(第一个参数)去调用get_id的方法获取id
所以user模型要写一个方法返回id
使用者方法要把login_manager

UserMixin

创建user模型类,继承UserMixin
UserMixin和login_user是在flask_login模块里面
在调用cookie生成的函数的时候,login_user就是生成cookie的函数
需要用到当前玩家的id去设置cookie
而UserMixin里面有可以直接返回id的方法,不用在重新写一个
UserMixin模块写有返回各种属性的方法,而login_user需要获取模型的id
所以User模型可以继承UserMixin类,返回id给login_user
若user模型设置的id不是id(如uid),则还是需要写一个方法进行转换

def get_id(self):
	return self.uid

current_user:获取当前的用户

current_user相当于就是实例化的用户对象,可以取用户的其他属性
在user 用户模型实现
根据uid得到用户
用户加载 使得current_user 可以通过uid获取用户
current_user根据user_loader的get_user的方法对用户进行查询
就上面的UserMixin对象,提供了一个get_user的方法获取当前用户的对象
编写get_user 方法用来根据id查询用户,若不写会报错

@login_manager.user_loader
def get_user(uid):
#如果是根据主键查询,不要filter_by,使用get方法即可
#返回表中查询到的用户id
return User.query.get(int(uid))

使用current_user调用UserMixin提供的方法,可对当前进行校验操作
如判断当前用户是否是登录状态,即是否处于已认证状态

if current_user.is_authenticated: #-->登录返回True,否则False
	登录了

login_required:
在需要限制登录才能访问的试图函数上,加入**@login_required**装饰器
登陆的视图函数,调用login_user设置cookie的函数
是一个flask_login的回调函数,
在登陆之后,每访问一个带Login_required装饰的视图函数就要执行一次,
该函数返回一个用户对象,通过id来用sql语句查到的用户数据
然后实例化一个对象,并返回
login_required实际上也是去调用了

current_user.is_authenticated 

判断是否是登陆状态,如不是就返回到**load_user(user,remember=True)**的视图函数上

logout_user登出,退出登录
判断当前cookie的名称是否在request.cookie里面,如则直接pop弹出
这样cookie就没了,就形成了一个退出的过程(这只是其中一小部分的实现)

@web.route('/logout')
@login_required
def logout():
    logout_user()
    return redirect(url_for('web.index'))
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值