目錄python
Django自帶一個用戶認證系統,用於處理用戶帳戶、羣組、許可和基於cookie的用戶會話。 Django的認證系統主要包含: 1.用戶 2.許可 3.組 4.可配置的密碼哈希系統 5.用於用戶登陸或者限制訪問的表單和視圖工具 6.可插拔的後臺系統
用戶對象是Django認證系統的核心,須要導入auth模塊,該模塊存在於django.contrib下數據庫
from django.contrib import auth
Django的認證框架只有一個用戶模型,就是User模型,它位於django.contrib.auth.models下.django
用戶模型主要有下面幾個字段:後端
from django.contrib.auth.models import User user = User.objects.create_user(name='yven',password='123456') user.last_name = 'law' user.save()
提供的用戶認證功能就是驗證用戶名以及密碼是否正確,若是認證成功,便返回一個User對象,authenticate()會在該User對象上設置一個屬性來標識後端已經認證了該用戶,且該信息在後續的登陸過程當中是須要的cookie
user = auth.authenticate(request,username=name,password=pwd) 至關於查詢:user=models.User.objects.filter(name=name,pwd=pwd).first()
該函數接收一個HttpRequest對象和一個User對象參數,該方法會把用戶的ID保存在Django的session中,一旦登陸成功,函數中的request對象中,就會有一個user對象,就是當前登陸的用戶對象,若是沒有登陸,request.user=AnonymousUser,匿名用戶session
from django.contrib.auth import authenticate, login def login(request): name = request.POST.get('name') pwd = request.POST.get('pwd') user = authenticate(username=name,password=pwd) if user: login(request,user) ... else: ...
from django.contrib.auth import logout def logout(request): logout(request)
def my_view(request): if not request.user.is_authenticated() return redirect('%s?next=%s' % (settings.LOGIN_URL,requst.path)) ...
auth爲咱們提供了一個裝飾器工具,用來快捷的給某個視圖添加登陸校驗app
from django.contrib.auth.decorators import login_required @login_required(login_url='/login/') def order(request): ...
login_url:若是沒有登陸,跳轉到的頁面,也能夠經過全局設置,在settings中配置LOGIN_URL='/login/'框架
auth提供了建立新用戶的方法,也提供了建立超級用戶的方法,須要提供必要參數.函數
from django.contrib.auth.models import User user = User.objects.create_user(username='用戶名',password='密碼'..) superuser = User.objects.create_superuser(username='用戶名',password='密碼'..)
auth提供一個檢查密碼是否正確的方法。正確返回true,錯誤false。工具
bool = request.user.check_password('密碼)
auth提供了一個修改密碼的方法set_password,接收要設置新密碼做爲參數,設置完必定要調用用戶對象的save()方法
request.user.set_password(password='新密碼') user.save()
is_staff:用戶是否擁有網站的管理權限。
is_active:是否容許用戶登陸,設置爲False,能夠在不刪除用戶的前提下禁止用戶登陸。
雖然內置的認證系統很好用,可是auth_user表的字段只有固定的幾個,實際的應用中須要的字段更多,因此須要對默認的auth_user表進行擴展,第一時間想到的方法是新建另一張表經過一對一和內置的auth_user表關聯,這樣的確能夠知足要求,可是其實能夠更好,就是經過繼承內置的AbstractUser類,來定義一個本身的Model類。
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): phone = models.CharField(max_length=255) address = models.CharField(max_length=255)
經過這種方法擴展內置的auth_user表以後,必定要在settings.py中告訴Django如今使用新定義的UserInfo表來作用戶認證。
AUTH_USER_MODEL = 'app名.UserInfo'
一旦咱們指定了新的認證系統所使用的表,咱們就須要從新在數據庫中建立該表,而不能繼續使用原來默認的auth_user表了。