1. 程式人生 > >Django使用者模型類User

Django使用者模型類User

Django認證系統同時處理認證和授權。簡單地講,認證驗證一個使用者是否它們聲稱的那個人,授權決定一個通過了認證的使用者被允許做什麼。 這裡的詞語“認證”同時指代這兩項任務,即Django的認證系統同時提供了認證機制和許可權機制。

Django的認證系統包含:

  • 使用者
  • 許可權:二元(是/否)標誌指示一個使用者是否可以做一個特定的任務。
  • 組:對多個使用者運用標籤和許可權的一種通用的方式。
  • 一個可配置的密碼雜湊系統
  • 使用者登入或內容顯示的表單和檢視
  • 一個可插拔的後臺系統

Django預設提供的認證系統中,使用者的認證機制依賴Session機制

Django使用者模型類

Django認證系統中提供了使用者模型類User儲存使用者的資料,預設的User包含以下常見的基本欄位:

  • username 必選。 150個字元以內。 使用者名稱可能包含字母數字,_,@,+ . 和-個字元。在Django更改1.10:max_length從30個字元增加到150個字元。
  • first_name 可選(blank=True)。 少於等於30個字元。
  • last_name 可選(blank=True)。 少於等於30個字元。
  • email 可選(blank=True)。 郵箱地址。
  • password 必選。 密碼的雜湊及元資料。 (Django 不儲存原始密碼)。 原始密碼可以無限長而且可以包含任意字元。
  • groups 與Group 之間的多對多關係。
  • user_permissions 與Permission 之間的多對多關係。
  • is_staff 布林值。 指示使用者是否可以訪問Admin 站點。
  • is_active 布林值。 指示使用者的賬號是否啟用。 我們建議您將此標誌設定為False而不是刪除帳戶;這樣,如果您的應用程式對使用者有任何外來鍵,則外來鍵不會中斷。它不是用來控制使用者是否能夠登入。 在Django更改1.10:在舊版本中,預設is_active為False不能進行登入。
  • is_superuser 布林值。 指定這個使用者擁有所有的許可權而不需要給他們分配明確的許可權。
  • last_login 使用者最後一次登入的時間。
  • date_joined 賬戶建立的時間。 當賬號建立時,預設設定為當前的date/time。

常用方法:

  • set_password(raw_password) 設定使用者的密碼為給定的原始字串,並負責密碼的。 不會儲存User 物件。當None 為raw_password 時,密碼將設定為一個不可用的密碼。
  • check_password(raw_password) 如果給定的raw_password是使用者的真實密碼,則返回True,可以在校驗使用者密碼時使用。

管理器方法: 管理器方法即可以通過User.objects. 進行呼叫的方法。

  • create_user(username, email=None, password=None, \extra_fields) 建立、儲存並返回一個User物件。
  • create_superuser(username, email, password, \extra_fields) 與create_user() 相同,但是設定is_staff 和is_superuser 為True。

建立自定義的使用者模型類

Django認證系統中提供的使用者模型類及方法很方便,我們可以使用這個模型類,但是欄位有些無法滿足專案需求,如專案中需要儲存使用者的手機號,需要給模型類新增額外的欄位。

Django提供了django.contrib.auth.models.AbstractUser使用者抽象模型類允許我們繼承,擴充套件欄位來使用Django認證系統的使用者模型類。

class User(AbstractUser):
    """使用者模型類"""
    mobile = models.CharField(max_length=11, unique=True, verbose_name='手機號')

    class Meta:
        db_table = 'tb_users'
        verbose_name = '使用者'
        verbose_name_plural = verbose_name

我們自定義的使用者模型類還不能直接被Django的認證系統所識別,需要在配置檔案中告知Django認證系統使用我們自定義的模型類。

在配置檔案中進行設定

AUTH_USER_MODEL = '應用名.模型類名'

注意:Django建議我們對於AUTH_USER_MODEL引數的設定一定要在第一次資料庫遷移之前就設定好,否則後續使用可能出現未知錯誤。

資料庫遷移:

python manage.py makemigrations
python manage.py migrate