基于Django用戶認(rèn)證系統(tǒng)詳解
一. 認(rèn)證系統(tǒng)概要
create_user 創(chuàng)建用戶
authenticate 驗證登錄
login 記住用戶的登錄狀態(tài)
logout 退出登錄
is_authenticated 判斷用戶是否登錄
login_required 判斷用戶是否登錄的裝飾器
二. 創(chuàng)建用戶和驗證登錄
當(dāng)用戶注冊的時候用create_user(username,password,email)默認(rèn)情況下is_active=True,is_staff=False,is_superuser=False。
底層將password用hash算法加密之后存儲到數(shù)據(jù)庫中。
當(dāng)用戶登錄的時候用authenticate(username=username,password=password)驗證登錄,判斷數(shù)據(jù)庫中是否存在用戶輸入的賬號和密碼,返回一個user對象。
底層將password用hash算法加密后和數(shù)據(jù)庫中password進(jìn)行對比。
三. 記住用戶的登錄狀態(tài)
當(dāng)用戶登錄的時候用login(request,user)來記住用戶的登錄狀態(tài),默認(rèn)將用戶的id存儲在session中。
login有兩個參數(shù)一個是request,一個是user,user的來源必須是authenticate返回的。也就是說用login之前必須先調(diào)用authenticate。
四. 退出登錄
當(dāng)用戶注銷的時候用logout(request),只需要一個參數(shù)request。
五. 判斷用戶是否登錄
在后臺的視圖函數(shù)里可以用request.user.is_authenticated()判斷用戶是否登錄
在前端頁面中可以用{% if user.is_authenticated %}{% endif %}判斷用戶是否登錄
六. 裝飾器判斷用戶是否登錄
基于普通的視圖函數(shù)可以使用@login_required來裝飾,但是基于類視圖的get和post方法不能直接使用@login_required來裝飾。
基于類視圖的裝飾有以下三種:
第一種:在urls文件中導(dǎo)入login_requtred,直接裝飾as_view()函數(shù)
url(r'^$', login_required(UserInfoView.as_view()), name='user')
第二種:自定義一個LoginRequiredView類繼承View類,重寫as_view()函數(shù),并裝飾as_view()函數(shù)的返回值。 我們自定義的視圖類就不需要再繼承View類,直接繼承LoginRequiredView類就好了。
class LoginRequiredView(View): @classmethod def as_view(cls, **initkwargs): # 調(diào)用View類中as_view方法 view = super(LoginRequiredView, cls).as_view(**initkwargs) # 調(diào)用login_required裝飾器 return login_required(view)
第三種:自定義一個LoginRequiredMixin類,重寫as_view()函數(shù),調(diào)用View中的as_view()函數(shù),并裝飾as_view()函數(shù)的返回值。 我們自定義的視圖類需要先繼承LoginRequiredMixin類再繼承View類。這種方式的關(guān)鍵點在于:多繼承中super()的調(diào)用順序和__mro__的順序是一樣的。
class LoginRequiredMixin(object): @classmethod def as_view(cls, **initkwargs): # 調(diào)用View類中as_view方法 view = super(LoginRequiredMixin, cls).as_view(**initkwargs) # 調(diào)用login_required裝飾器 return login_required(view)
以上這篇基于Django用戶認(rèn)證系統(tǒng)詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
pytorch常用函數(shù)之torch.randn()解讀
這篇文章主要介紹了pytorch常用函數(shù)之torch.randn()解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02pycharm創(chuàng)建并使用虛擬環(huán)境的詳細(xì)圖文教程
Python的虛擬環(huán)境是正常的現(xiàn)實環(huán)境相對應(yīng)的,在虛擬環(huán)境中安裝的包是與現(xiàn)實環(huán)境隔離的,下面這篇文章主要給大家介紹了關(guān)于pycharm創(chuàng)建并使用虛擬環(huán)境的詳細(xì)圖文教程,需要的朋友可以參考下2022-08-08在win64上使用bypy進(jìn)行百度網(wǎng)盤文件上傳功能
這篇文章主要介紹了在win64上使用bypy進(jìn)行百度網(wǎng)盤文件上傳功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01