1. 程式人生 > 程式設計 >Django3中的自定義使用者模型例項詳解

Django3中的自定義使用者模型例項詳解

介紹

嗨,在這篇文章中,我們將學習在Django 3中建立自定義使用者模型,並且還將更改Django Admin的預設登入功能。 我們將使用電子郵件和密碼登入。

動機

我必須為我的應用程式建立一個“自定義使用者”,我能夠建立模型,但問題是createsuperuser命令無法正常工作。 為了除錯它,我不得不做大量研究,問題是當時大多數資源已經過時,所以我決定寫這篇文章。

我做了一個GitHub倉庫,所以如果您願意,可以直接使用它(這裡有說明)

讓我們開始吧

首先,建立一個Django Project並建立一個名為users的應用程式

現在我們可以開始在使用者應用程式中編輯models.py檔案了

在進行編輯之前,先做一些理論上的準備。

Django中的經理是什麼?

Manager是一個介面,通過該介面可以將資料庫查詢操作提供給Django模型。 Django應用程式中的每個模型至少都有一個Manager。-Django Docs

簡單地說,經理為我們提供了一種管理模型的方法。 我們可以通過使模型成為Manager類的子類來實現此目的。 管理器類是可以編輯諸如createsuperuser之類的命令的地方。

現在開啟models.py並將以下程式碼放入其中

from django.db import models
from django.contrib.auth.models import AbstractBaseUser,BaseUserManager,PermissionsMixin


class UserManager(BaseUserManager):
 def create_user(self,email,password=None):
  """
  Creates and saves a User with the given email and password.
  """
  if not email:
   raise ValueError('Users must have an email address')

  user = self.model(
   email=self.normalize_email(email),)

  user.set_password(password)
  user.save(using=self._db)
  return user

 def create_superuser(self,password):
  """
  Creates and saves a superuser with the given email and password.
  """
  user = self.create_user(
   email,password=password,)
  user.is_staff = True
  user.is_superuser = True
  user.save(using=self._db)
  return user


class CustomUser(AbstractBaseUser,PermissionsMixin):
 name = models.CharField(max_length=50,default='Anonymous')
 email = models.EmailField(max_length=100,unique=True)

 username = None

 USERNAME_FIELD = 'email'
 REQUIRED_FIELDS = []

 session_token = models.CharField(max_length=10,default=0)

 active = models.BooleanField(default=True)
 # a admin user; non super-user
 is_staff = models.BooleanField(default=False)
 is_superuser = models.BooleanField(default=False) # a superuser

 created_at = models.DateTimeField(
  auto_now_add=True,blank=True,null=True)
 updated_at = models.DateTimeField(auto_now=True)

 objects = UserManager()

這裡要注意的最重要的事情是is_staff和is_superuser屬性。 在其中輸入錯誤可能會導致除錯困難。

我們在這裡做了什麼?

我們已經為我們的使用者模型進行了管理。 在其中,我們製作了兩個函式,分別稱為create_user和create_superuser。
顧名思義,create_user將建立一個新使用者,並通過將is_staff和is_superuser設定為true來使用create_superuser建立一個超級使用者。

經理之後,我們便有了通常的模式。

我們將使用者名稱設定為none,因為我們不想包含使用者名稱。

其中的USERNAME_FIELD表示我們宣告為“電子郵件”。 這應該是唯一的。

session_token是一個可選欄位。 我在那裡,因為我正在製作我的自定義令牌。

models.py的最後一行指示CustomUser是UserManager的物件。

重要的事情

製作完模型後,開啟settings.py檔案並在其中新增一行

AUTH_USER_MODEL = 'users.CustomUser'

Django允許您通過為AUTH_USER_MODEL設定提供一個引用自定義模型的值來覆蓋預設使用者模型。 這條虛線對描述了Django應用程式的名稱(必須在您的INSTALLED_APPS中),以及您希望用作使用者模型的Django模型的名稱。 -Django文件

最後步驟

現在,您可以執行遷移命令並建立超級使用者。

py manage.py makemigrations
py manage.py migrate
py manage.py createsuperuser

它將要求您提供電子郵件和密碼。 詳細說明。

不要忘記在管理員中註冊該應用

admin.site.register(CustomUser)

現在,您可以執行伺服器並在管理面板中使用您的電子郵件和密碼登入。

如果您有任何建議,請告訴我。

git:https://github.com/theshubhagrwl/django_custom_user_app

總結

到此這篇關於Django3中的自定義使用者模型的文章就介紹到這了,更多相關Django3自定義使用者模型內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!