天天看點

flask中的使用者認證(simple_authenticate)

使用者認證中心通過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)
           

繼續閱讀