当前位置: 首页 > 工具软件 > flask-jsonrpc > 使用案例 >

flask中的用户认证(simple_authenticate)

齐文林
2023-12-01

用户认证中心通过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)
 类似资料: