1. 程式人生 > 其它 >在Django中建立自己的自定義使用者模型

在Django中建立自己的自定義使用者模型

自定義使用者模型有什麼需求?

建立自己的自定義使用者模型至關重要。將來,如果要對模型進行一些更改,則可以輕鬆進行這些更改。不然我們可能必須對模型進行一些更改,而且程式碼的某些部分也將被更改。在某些網站中,與使用者名稱相比,使用電子郵件進行登入是有意義的。因此,對於程式設計師而言,擁有自定義使用者模型是一個好習慣。

本文將幫助大家根據需要建立自己的自定義使用者模型。請繼續執行以下步驟。

  1. Django 安裝

  2. 建立Django應用

  3. 該應用程式的自定義模型

  4. 遷移資料庫

1. Django安裝

設定Django之後,進入建立的環境。然後,我們可以通過以下命令建立Django專案。

django-adminstartprojectmysite

2.建立Django應用

如果發現某些網站使用了類似/ accounts /的URL,它們看起來就是專業程式碼。因此,我們還需要建立一個名為accounts的應用程式,在其中管理與該帳戶有關的所有事情。因此,在當前環境中,使用以下命令建立Django應用。

pythonmanage.pystartappaccounts

建立後,該應用將包含基本檔案。建立的檔案如下所示。

accounts/
__init__.py
admin.py
apps.py
models.py
tests.py
views.py

一旦建立,所有的資料庫模型程式碼都應該寫在models.py檔案中。另外,不要忘記建立一個urls.py檔案,該檔案有助於通過帳戶應用程式路由連結。建立完成後,讓我們進入根據我們的需求構建自定義使用者模型的下一步。

3.該應用程式的自定義模型

因此,為了建立自定義使用者模型,我們需要在models.py檔案中寫下以下程式碼,因為python使用物件來管理和訪問儲存在資料庫中的資料。下面提到了models.py檔案的程式碼。

fromdjango.dbimportmodels
fromdjango.contrib.auth.modelsimportAbstractBaseUser,BaseUserManager
importuuid


classUserManager(BaseUserManager):
defcreate_user(self,email,firstname,lastname,phone,password=None):
user=self.model(
email=self.normalize_email(email),
firstname=firstname,
lastname=lastname,
phone=phone,
)
user.set_password(password)
user.save(using=self._db)
returnuser

defcreate_superuser(self,email,firstname,lastname,phone,password=None):
user=self.create_user(
email=email,
password=password,
firstname=firstname,
lastname=lastname,
phone=phone,
)
user.is_admin=True
user.is_staff=True
user.save(using=self._db)
returnuser

classUser(AbstractBaseUser):
id=models.CharField(max_length=200,default=uuid.uuid4,unique=True,primary_key=True)
email=models.EmailField(null=False,max_length=100,unique=True)
firstname=models.CharField(null=False,max_length=100)
lastname=models.CharField(null=False,max_length=100)
phone=models.IntegerField(null=False,unique=True)
date_joined=models.DateTimeField(auto_now=True)
last_login=models.DateTimeField(auto_now=True)
is_admin=models.BooleanField(default=False)
is_active=models.BooleanField(default=True)
is_staff=models.BooleanField(default=False)
is_superuser=models.BooleanField(default=False)

USERNAME_FIELD='email'
REQUIRED_FIELDS=['firstname','lastname','phone']

objects=UserManager()

def__str__(self):
returnself.email+","+self.firstname

defhas_perm(self,perm,obj=None):
returnself.is_admin

defhas_module_perms(self,app_label):
returnTrue

使用者類包含表的欄位或結構,我們在其中獲取有關使用者的一些詳細資訊以及其中的某些條件。為了管理User類,我們有UserManager,它將用於建立新使用者或超級使用者。就像我之前說的,這裡的使用者名稱欄位將被替換為電子郵件。它比使用者名稱欄位更有意義。還提到了必填欄位。通過使用電子郵件作為使用者名稱欄位,它會自動將電子郵件欄位新增為必不可少的欄位。

因此,通過UserManager,我們可以建立一個新的普通使用者和一個超級使用者。user.set_password()會將純文字密碼雜湊為預設的雜湊演算法。Django將PBKDF2與SHA-256雜湊一起使用,並具有密碼擴充套件機制。user.save()函式將使用欄位和雜湊密碼儲存建立的使用者。建立自定義使用者模型很簡單。

在這裡需要注意,在建立模型之前不要遷移模型。在此之前,建立模型後,我們必須使用自定義模型更新Django設定檔案,否則Django將使用其自己的預先實現的模型。只需在專案目錄中的settings.py檔案中使用此程式碼即可。

AUTH_USER_MODEL=‘accounts.User’

設定好模型後,就該將模型遷移到資料庫了。

4.遷移模型

現在,我們準備通過將更改遷移到資料庫中來遷移自定義使用者模型。使用以下命令在當前環境中遷移並執行該程式碼。

pythonmanage.pymakemigrations
pythonmanage.pymigrate

此命令將查詢Django專案中的所有模型和模型中的更改。如果要專門為應用程式進行遷移,可以使用以下命令進行。

pythonmanage.pymakemigrations<app_name>
pythonmanage.pymigrate<app_name>

可以將<app_name>替換為帳戶,以僅在該應用程式上進行更改。