用戶登錄功能實現 | Django開發
阿新 • • 發佈:2017-10-20
key code .get response 記錄 出錯 滿足 服務器 保持 處理登錄頁面
# form表單中action對應url反向解析;1.創建處理登錄頁面視圖,匹配url
# 點擊登錄需要對數據進行校驗;2.創建校驗數據函數
# 檢測登陸參數是否合法 def check_login_params(request): # 獲取表單數據 user_name = post(request, ‘user_name‘) user_pass = post(request, ‘3.校驗成功後user_pass‘) # 對數據校驗 if not (5 <= len(user_name) <= 20): return False if not (8 <= len(user_pass) <= 20): return False # 檢測用戶是否存在 user = User.objects.user_by_name(user_name)if not user: return False else: if user.user_pass == password_encryption(user_pass): return True else: return False
# 記錄用戶狀態;判斷是否需要記錄用戶名;# 登錄失敗跳轉至登錄頁面;
# 處理登陸 def login_handle(request): # 1.對用戶名密碼做簡單校驗 # 在fuction中定義一個校驗函數 if check_login_params(request): # 登陸成功後; # 1.記錄用戶狀態 # 2.是否需要記錄用戶名 else: # 用戶登陸不成功 return redirect(reverse(‘user:login‘))4.寫session記錄用戶狀態
# 設置cookie # 服務器端在接收到瀏覽器請求之後,返回過程中將用戶名以鍵值對的形式寫到cookie中; # 通過參數max_age來設置過期時間為24小時;
def set_cookie(response, key, value): response.set_cookie(key, value, max_age=60*60*24) # 獲取cookie # 瀏覽器帶著cookie對服務器再次發出請求,服務器端處理請求, # 獲取cookie中存有的用戶名的值,寫到html中返回給瀏覽器; # 傳入的第二個參數‘‘,是為了防止數據為空導致程序出錯,讓其返回一個空字符串; def get_cookie(request, key): return request.COOKIES.get(key, ‘‘) # 刪除cookie # 當服務器端處理完請求之後,想刪除cookie,就在返回的過程中把cookie刪除; def del_cookie(response, key): response.delete_cookie(key) # 設置session # 瀏覽器請求訪問,驗證成功之後,服務器端將用戶名跟密碼以鍵值對的方式存在session中, # session是存儲在服務器端的,工作形式是: # 在存儲的同時,生成一個sessionid標記每一個session,以鍵值對的形式存入一個cookie中, # 返回給瀏覽器;不標記session鬼知道是哪個瀏覽器訪問服務器存的值? def set_session(request, key, value): request.session[‘key‘] = value # 獲得session # 保持登錄狀態; # 在瀏覽器登陸驗證成功之後,進入登入狀態,服務器端返回登錄處理結果以及存有sessionid的cookie; # 馬上,瀏覽器就跳轉訪問首頁,再次發起請求,帶著這個cookie到服務器端, # 服務器端根據讀取的sessionid,將對應的session從數據庫中取出來,寫到html中返回給瀏覽器; def get_session(request, key): return request.session.get(‘key‘, ‘‘) # 刪除session # 在手動註銷登陸的時候刪除session; def del_session(request): request.session.flush()
# 在用戶登錄成功在處理登錄的視圖中保留登錄狀態,並且因為勾選checkbox而保存用戶名; # 處理登錄 # 在處理登入狀態中,先要對用戶名密碼做簡單的校驗處理,滿足條件,並且用戶名存在; # 就記錄登錄狀態,記錄用戶名;並返回到上一個頁面; def login_handle(request): # 1.對用戶名密碼做簡單校驗 # 在fuction中定義一個校驗函數 if check_login_params(request): # 登陸成功後; # 1.記錄用戶狀態 keep_user_online(request) # 2.是否需要記錄用戶名 # 處理登錄之後要跳轉上一個頁面; # response = redirect(get_redirect_url(request)) response = redirect(reverse(‘users:register‘)) remember_username(request, response) return response else: # 用戶登陸不成功 return redirect(reverse(‘users:login‘))
用戶登錄功能實現 | Django開發