用户认证中心通过session的设置和获取判断用户是否已经登录.
此处使用的是flask中的before_request的钩子函数进行简化,并增加一个装饰器为每一需要认证的功能模块进行装饰:
导入所有需要的python包
from flask import Flask,g,session,request,make_response
步骤1:创建一个app对象
app = Flask(__name__)
步骤2:设置secret_key
app.secret_key='TjhfhieRdfe134E2srfWE'
步骤3:当访问视图前,调用该功能,获取所有登陆用户的信息,并把数据存在g对象中
@app.before_request
def get_session():
g.data = {}
g.data['name'] = session.get('name')
print(g.data['name'])
步骤4: 定义一个功能函数,用来用户登陆,相当于设置session
@app.route('/login')
def user_login():
# 获取登陆信息
user_name = request.args.get('user_name')
password = request.args.get('password')
if not all([user_name,password]):
return '登陆信息不能为空'
if not (user_name == 'laowang' and password=='123456'):
return '用户名或密码出错'
response = make_response('success login')
session['name'] = user_name
session['pwd'] = password
return response
步骤5:定义一个功能函数,用来使用户退出登陆
@app.route('/loginout')
def LoginOut():
if not session.get('name'):
return '请先登陆'
session.clear()
g.data = None
return '退出成功'
步骤6: 定义一个装饰器,当某个模块需要进行登陆认证时进行是否登陆判断
def AuthWrapper(func):
def InnerWrapper(*args,**kwargs):
if not g.data.get('name'):
return '请登陆'
else:
return func(*args,**kwargs)
return InnerWrapper
步骤7:定义功能模块,用户获取数据(用户获取数据需要对当前是否登陆进行认证)
@app.route('/user_info')
@AuthWrapper
def get_user_info():
return session.get('name')
步骤8:启动服务器运行,并设定指定的IP地址和端口号,进入调试模式
if __name__=='__main__':
app.run(debug=True,host='127.0.0.1',port=5002)