Django auth組件

一.認證系統

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

用戶模型主要有下面幾個字段:後端

  • username
  • password
  • email
  • first_name
  • last_name

1.建立用戶

from django.contrib.auth.models import User
user = User.objects.create_user(name='yven',password='123456')
user.last_name = 'law'
user.save()

2.用戶認證

提供的用戶認證功能就是驗證用戶名以及密碼是否正確,若是認證成功,便返回一個User對象,authenticate()會在該User對象上設置一個屬性來標識後端已經認證了該用戶,且該信息在後續的登陸過程當中是須要的cookie

user = auth.authenticate(request,username=name,password=pwd)
至關於查詢:user=models.User.objects.filter(name=name,pwd=pwd).first()

3.用戶登陸

該函數接收一個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:
        ...

4.註銷用戶

from django.contrib.auth import logout
def logout(request):
    logout(request)

5.判斷用戶是否登陸

def my_view(request):
    if not request.user.is_authenticated()
        return redirect('%s?next=%s' % (settings.LOGIN_URL,requst.path))
    ...

6.登陸認證裝飾器

auth爲咱們提供了一個裝飾器工具,用來快捷的給某個視圖添加登陸校驗app

from django.contrib.auth.decorators import login_required

@login_required(login_url='/login/')
def order(request):
    ...

login_url:若是沒有登陸,跳轉到的頁面,也能夠經過全局設置,在settings中配置LOGIN_URL='/login/'框架

7.建立普通用戶和超級用戶

auth提供了建立新用戶的方法,也提供了建立超級用戶的方法,須要提供必要參數.函數

from django.contrib.auth.models import User
user = User.objects.create_user(username='用戶名',password='密碼'..)
superuser = User.objects.create_superuser(username='用戶名',password='密碼'..)

8.校驗密碼

auth提供一個檢查密碼是否正確的方法。正確返回true,錯誤false。工具

bool = request.user.check_password('密碼)

9.修改密碼

auth提供了一個修改密碼的方法set_password,接收要設置新密碼做爲參數,設置完必定要調用用戶對象的save()方法

request.user.set_password(password='新密碼')
user.save()

10.is_staff和is_active

is_staff:用戶是否擁有網站的管理權限。

is_active:是否容許用戶登陸,設置爲False,能夠在不刪除用戶的前提下禁止用戶登陸。

三.擴展默認的auth_user表

雖然內置的認證系統很好用,可是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表了。

相關文章
相關標籤/搜索