(1)自己实现,登陆后,将用户数据塞入到session中,在请求钩子before_request之前,可以将session中的数据放入到请求上下文g(全局变量)中去,然后实现全页面流通。退初登录时,将设置的session和g对象中的值置空
(2)使用 flask-login,简单步骤如下
2.1安装 pip install flask-login
2.2 主文件导入
form flask_login import LoginManager
2.3 主文件登录绑定app
login_manager = LoginManager()
login_manager.login_view = 'accounts.login'
login_manager.login_message = '请登录'
login_manager.login_message_category = 'danger'
login_manager.init_app(app)
2.4 用户模型增加相关属性
'''是否授权'''
@property
def is_authenticated(self):
return True
'''用户是否激活'''
@property
def is_active(self):
return self.status == constents.UserStatus.USER_ACTIVE.value
'''是否匿名'''
@property
def is_anonymous(self):
return False
'''获取用户Id'''
def get_id(self):
return '{}'.format(self.id)
2.5 主文件引入用户
@login_manager.user_loader
def load_user(user_id):
return User.query.get(user_id)
2.6 登录视图函数中 将用户绑定进去
2.6.1 先导入 form flask_login import login_user
2.6.2 函数中相应位置绑定 login_user(user)
2.7 模板中使用
2.8 退出登录
2.8.1 先导入 from flask_login import logout_user
2.8.2 视图函数响应位置加上 logout_user()
2.9 强制视图方法使用前先登录
2.9.1 先导入 from flask_login import login_required
2.9.2 方法前加上装饰器 @login_required
2.10 登陆后如何跳转到登陆前的位置()
靠next参数, 进入某个页面因为未登录被打回登录页面后,会把当前页面的地址放入到域名中的next参数里。解决办法
2.10.1 登录视图函数中获取 参数
next_url = request.values.get('next',url_for('qa.index'))
2.10.2 页面传参加上这个
return render_template('login.html', form=form, next=next_url)
2.10.3 模板中 加隐藏数据
<input type="hidden" value="{{ next }}" name="next">
2.10.4 视图文件中 跳转页面时跳转到这个地址中
return redirect(next_url)
Original: https://blog.csdn.net/qq_37454914/article/details/124737226
Author: 脑子忘家了
Title: flask两种登录的方式
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/744803/
转载文章受原作者版权保护。转载请注明原作者出处!