主要思想就是通過session中是否有指定的值來判定使用者是否已經登入,登入及跳轉到指定的頁面否則跳轉到登入介面進行登入.
首先寫乙個登入的試圖函式:
def login():
if request.method == 'get':
return render_template('login.html')
user = request.form.get('user') #form的表單提交的資料 request.form 類似於post請求 request.args 類似django的request.get
pwd = request.form.get('pwd')
if user =='gallo' and pwd=='123':
session['user'] = user
return redirect('/home')
return render_template('login.html',error="使用者名稱錯誤")
每次在函式內首先進行session的判定:
def home():
user = session.get('user')
if not user:
return redirect('/login')
return render_template('home.html')
每次在函式內部最前面先進行session的判定,滿足則跳轉到'/home'頁面,否則跳轉到''/login'頁面.
此方法的弊端:重複**過多不利於開發.所以需要改進
通過裝飾器來對其進行判定:
import functools
def is_login(func):
@functools.warps(func)
def inner(*args,**kwargs):
user = session.get('user')
if not user:
return redirect('login')
return func(*args,**kwargs)
return inner
我們可以看到此裝飾器裡面還有乙個functools.waprs():的函式,這樣做的目的是為了通過裝飾器後不改變函式的性質,如果不加裝飾器所有函式都name會是inner函式,加上此函式可以不改變函式的性質.
所以加上裝飾器的函式將會是:
@is_login
def home():
return render_template('home.html')
berfore_request的作用是在所有函式執行之前都應該先執行before_request函式.
所以只需要單獨寫乙個函式來實現before_request的功能即可.
@before_request
def is_login():
if requset.path == 'login':
return none
if session.get('user'):
return none
return redirect('/login')
然而沒有什麼完美的事情比如說before_request讓**看起來更加簡潔可是,他必須實在所有函式執行之前都會執行,所有有些時候不適合用此方法. 實現ssh自動登陸的三種方式
要實現ssh自動登入,主要有三種方法 1 生成公私鑰。2 編寫expect指令碼。3 用sshpass。用法 sshpass 引數 ssh命令 ssh,sftp,scp等 引數 p password 將引數password作為密碼。f passwordfile 提取檔案passwordfile的第一...
總結關於登陸Linux的三種方式
在本人實際工作中遇到了三種不同的linux伺服器登陸方式,由簡單到複雜分別闡述 1.最簡單的root賬號密碼登陸 通過root root密碼登陸linux伺服器 2.普通使用者登陸 通過普通使用者登陸到伺服器上,如果要使用sudo的許可權就需要切換到root賬號上去 3.公鑰私鑰免密碼的方式登陸 可...
C 中三種new的用法
string ps new string abc 上面這個new表示式完成了兩件事情 申請記憶體和初始化物件。new操作符類似於c語 言中的malloc,只是負責申請記憶體,例如 void buffer operator new sizeof string 注 意這裡多了乙個operator。這是n...