1. 程式人生 > >Django自帶的使用者模型類 // 以及如何建立自定義的使用者模型類

Django自帶的使用者模型類 // 以及如何建立自定義的使用者模型類

原文詳細文件可參考: https://yiyibooks.cn/xx/Django_1.11.6/ref/contrib/auth.html#django.contrib.auth.models.User

Django使用者模型類

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

基本欄位:

  1. username

    必選。 150個字元以內。 使用者名稱可能包含字母數字,_,@,+ . 和-個字元。在Django更改1.10:max_length從30個字元增加到150個字元。

  2. first_name

    可選(blank=True)。 少於等於30個字元。

  3. last_name

    可選(blank=True)。 少於等於30個字元。

  4. email

    可選(blank=True)。 郵箱地址。

  5. password

    必選。 密碼的雜湊及元資料。 (Django 不儲存原始密碼)。 原始密碼可以無限長而且可以包含任意字元。

  6. groups

    與Group 之間的多對多關係。

  7. user_permissions

    與Permission 之間的多對多關係。

  8. is_staff

    布林值。 指示使用者是否可以訪問Admin 站點。

  9. is_active

    布林值。 指示使用者的賬號是否啟用。 我們建議您將此標誌設定為False而不是刪除帳戶;這樣,如果您的應用程式對使用者有任何外來鍵,則外來鍵不會中斷。它不是用來控制使用者是否能夠登入。 在Django更改1.10:在舊版本中,預設is_active為False不能進行登入。

  10. is_superuser
    布林值, 指定這個使用者擁有所有的許可權而不需要給他們分配明確的許可權;

  11. last_login
    使用者最後一次登入的時間。

  12. date_joined
    賬戶建立的時間。 當賬號建立時,預設設定為當前的date/time。

常用方法:

1. set_password(raw_password)

設定使用者的密碼為給定的原始字串,並負責密碼的。 不會儲存User 物件。當None 為raw_password 時,密碼將設定為一個不可用的密碼。

2 . check_password(raw_password)

如果給定的raw_password是使用者的真實密碼,則返回True,可以在校驗使用者密碼時使用。

管理器方法:

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

1. create_user(username, email=None, password=None, \extra_fields)

建立、儲存並返回一個User物件。

2 .create_superuser(username, email, password, \extra_fields)

與create_user() 相同,但是設定is_staff 和is_superuser 為True。

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

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

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

我們現在在test/apps中建立Django應用users,並在配置檔案中註冊users應用。

在建立好的應用models.py中定義使用者的使用者模型類。

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 = 'users.User'

AUTH_USER_MODEL 引數的設定以點.來分隔,表示應用名.模型類名。

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