在很多业务处理的时候都需要用户在登陆状态下才可以进行,为了防止用户进行错误的操作,就需要添加登录验证。
1、创建一个进行登录验证的装饰器
def login_required(func):
@functools.wraps(func) # 修饰内层函数,防止当前装饰器去修改被装饰函数的属性
def inner(*args, **kwargs):
# 从session获取用户信息,如果有,则用户已登录,否则没有登录
user_id = session.get('user_id')
print("session user_id:", user_id)
if not user_id:
# WITHOUT_LOGIN是一个常量
return jsonify(errcode=constants.WITHOUT_LOGIN,
err="用户未登录")
else:
# 已经登录的话 g变量保存用户信息,相当于flask程序的全局变量
g.user_id = user_id
return func(*args, **kwargs)
return inner
2、在需要登录才能进入的url下使用
@api.route('/index')
@login_required
def index():
return "<h1>index</h1>"
3、测试
未登录状态下,访问index页面被拦截
登录状态下,正常访问index页面