django自帶認證系統

2022-05-17 02:52:06 字數 2989 閱讀 5867

使用者

許可權密碼雜湊系統

表單和檢視工具

django內建認證系統不支援的板塊

密碼強度     ---->我們通過第三方包解決

限制登入次數 ----> 自定義中介軟體解決

物件級許可權 --->django只支援到模型級

建立普通使用者

使用者資訊儲存在模型類的user表中。可以使用django auth 封裝的create_user方法建立普通使用者

models.user.objects.create_user(username='使用者名稱',password='密碼',email='郵箱')

建立超級使用者

原理同上,通過create_superuser方法建立超級使用者

models.user.objects.create_superuser(username='使用者名稱',password='密碼',email='郵箱')

from django.contrib.auth import authenticate
通過傳入使用者名稱和密碼,判斷使用者是否註冊,如註冊會返回使用者名稱,如未註冊會返回none
from django.contrib.auth import login   #匯入login函式

login(request物件,經過authenticate判斷過的物件)

該函式接受乙個httprequest物件,以及乙個經過認證的user物件。上面就是把認證過的user物件封裝到request.user中

我們可以通過request.user我們封裝的認證物件的資訊

該函式實現乙個使用者登入的功能。它本質上會在後端為該使用者生成相關session資料。

def post(self,request):   #post請求

username=request.post.get('username') #獲取使用者名稱

password=request.post.get('password') #獲取密碼

p=authenticate(username=username,password=password) #賬號名密碼進行驗證

if p is not none: #判斷是否驗證成功

login(request,p) #記錄登入狀態

return redirect("/index") #跳轉到index頁面

else:

return httpresponse("110") #驗證失敗

from django.contrib.auth import logout    

該函式接受乙個httprequest物件,無返回值。

當呼叫該函式時,當前請求的session資訊會全部清除也就是清除前面我們封裝的user物件。該使用者即使沒有登入,使用該函式也不會報錯。

def logout(request):

auth.logout(request)

return redirect('/login/')

from django.contrib.auth import is_authenticated
def my_view(request):

if not request.user.is_authenticated():

return redirect('/index')

auth 給我們提供的乙個裝飾器工具,用來快捷的給某個檢視新增登入校驗。
from django.contrib.auth.decorators import login_required

@login_required

def my_view(request):

...若使用者沒有登入,則會跳轉到django預設的 登入url '/accounts/login/ ' 並傳遞當前訪問url的絕對路徑 (登陸成功後,會重定向到該路徑,這個需要我們在登入頁面設定)。

如果需要自定義登入的url,則需要在settings.py檔案中通過login_url進行修改。

在setting中加上

login_url = '/login/' # 這裡配置成你專案登入頁面的路由

這內建的認證系統這麼好用,但是auth_user表字段都是固定的那幾個,我在專案中沒法拿來直接使用啊!

比如,我想要加乙個儲存使用者手機號的字段,怎麼辦?

聰明的你可能會想到新建另外一張表然後通過一對一和內建的auth_user表關聯,這樣雖然能滿足要求但是有沒有更好的實現方式呢?

答案是當然有了。

我們可以通過繼承內建的 abstractuser 類,來定義乙個自己的model類。

這樣既能根據專案需求靈活的設計使用者表,又能使用django強大的認證系統了。

from django.contrib.auth.models import abstractuser

class userinfo(abstractuser):

"""使用者資訊表

"""nid = models.autofield(primary_key=true)

phone = models.charfield(max_length=11, null=true, unique=true)

def __str__(self):

return self.username

注意

按上面的方式擴充套件了內建的auth_user表之後,一定要在settings.py中告訴django,我現在使用我新定義的userinfo表來做使用者認證。寫法如下:

# 引用django自帶的user表,繼承使用時需要設定

05 Django自帶的認證系統

我們在開發乙個 的時候,無可避免的需要設計實現 的使用者系統。此時我們需要實現包括使用者註冊 使用者登入 使用者認證 登出 修改密碼等功能,這還真是個麻煩的事情呢。django作為乙個完美主義者的終極框架,當然也會想到使用者的這些痛點。它內建了強大的使用者認證系統 auth,它預設使用 auth u...

Django自帶的使用者認證

auth模組 from django.contrib import auth auth模組中的方法 authenticate 提供了使用者認證功能,即驗證使用者名稱以及密碼是否正確,一般需要username password兩個關鍵字引數。如果認證成功 使用者名稱和密碼正確有效 便會返回乙個 use...

Django自帶認證系統郵件模板自定義

這幾天部署docker設定nginx遇到了郵件傳送問題 首先我的問題就是,在伺服器上部署docker之後 然後宿主機的nginx設定 server proxy pass監聽了docker內網埠 然後 使用了django自帶的認證系統 以及封裝好的django registration redux註冊...