使用者
許可權密碼雜湊系統
表單和檢視工具
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註冊...