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