Django提供了認證系統,但是我們的項目中的註冊,需要保存用戶的手機號,所以要自定義用戶模型類,需要給模型類添加額外的欄位。 ...
Django商城項目筆記No.3用戶部分-用戶模型類
Django提供了認證系統,文檔資料https://yiyibooks.cn/xx/Django_1.11.6/topics/auth/index.html
但是我們的項目中的註冊,需要保存用戶的手機號,所以要自定義用戶模型類,需要給模型類添加額外的欄位。
Django用戶模型類
Django認證系統中提供了用戶模型類User保存用戶的數據,預設的User包含以下常見的基本欄位:
-
username
必選。 150個字元以內。 用戶名可能包含字母數字_
@
+
.
-
-
password必選。 密碼的哈希及元數據。 (Django 不保存原始密碼)。 原始密碼可以無限長而且可以包含任意字元。
-
first_name可選。(
blank=True
)。 少於等於30個字元。 -
last_name可選(blank=True)。 少於等於30個字元。
-
email可選(
blank=True
)。 郵箱地址。 -
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認證系統的用戶模型類。
在應用users的models.py中定義用戶的用戶模型類。
from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. 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_nameView Code
我們自定義的用戶模型類還不能直接被Django的認證系統所識別,需要在配置文件中告知Django認證系統使用我們自定義的模型類。
在配置文件中進行設置
AUTH_USER_MODEL = 'users.User'
AUTH_USER_MODEL
參數的設置以點.
來分隔,表示應用名.模型類名
。
註意:Django建議我們對於AUTH_USER_MODEL
參數的設置一定要在第一次資料庫遷移之前就設置好,否則後續使用可能出現未知錯誤。
在執行資料庫遷移之前,一定要先設置好AUTH_USER_MODEL
不然會出錯
執行資料庫遷移
python manage.py makemigrations
python manage.py migrate