Flask中三種檢驗是否登陸的方法

2021-09-18 05:43:32 字數 1684 閱讀 5722

主要思想就是通過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...