溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用Django3如何實(shí)現(xiàn)自定義用戶模型

發(fā)布時(shí)間:2020-11-07 16:36:12 來源:億速云 閱讀:122 作者:Leah 欄目:開發(fā)技術(shù)

使用Django3如何實(shí)現(xiàn)自定義用戶模型?針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

首先,創(chuàng)建一個(gè)Django Project并創(chuàng)建一個(gè)名為users的應(yīng)用程序

現(xiàn)在我們可以開始在用戶應(yīng)用程序中編輯models.py文件了

在進(jìn)行編輯之前,先做一些理論上的準(zhǔn)備。

Django中的經(jīng)理是什么?

Manager是一個(gè)接口,通過該接口可以將數(shù)據(jù)庫查詢操作提供給Django模型。 Django應(yīng)用程序中的每個(gè)模型至少都有一個(gè)Manager。-Django Docs

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

現(xiàn)在打開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, email, 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屬性。 在其中輸入錯(cuò)誤可能會導(dǎo)致調(diào)試?yán)щy。

我們在這里做了什么?

我們已經(jīng)為我們的用戶模型進(jìn)行了管理。 在其中,我們制作了兩個(gè)函數(shù),分別稱為create_user和create_superuser。
顧名思義,create_user將創(chuàng)建一個(gè)新用戶,并通過將is_staff和is_superuser設(shè)置為true來使用create_superuser創(chuàng)建一個(gè)超級用戶。

經(jīng)理之后,我們便有了通常的模式。

我們將用戶名設(shè)置為none,因?yàn)槲覀儾幌氚脩裘?/p>

其中的USERNAME_FIELD表示我們聲明為“電子郵件”。 這應(yīng)該是唯一的。

session_token是一個(gè)可選字段。 我在那里,因?yàn)槲艺谥谱魑业淖远x令牌。

models.py的最后一行指示CustomUser是UserManager的對象。

重要的事情

制作完模型后,打開settings.py文件并在其中添加一行

AUTH_USER_MODEL = 'users.CustomUser'

Django允許您通過為AUTH_USER_MODEL設(shè)置提供一個(gè)引用自定義模型的值來覆蓋默認(rèn)用戶模型。 這條虛線對描述了Django應(yīng)用程序的名稱(必須在您的INSTALLED_APPS中),以及您希望用作用戶模型的Django模型的名稱。 -Django文檔

最后步驟

現(xiàn)在,您可以運(yùn)行遷移命令并創(chuàng)建超級用戶。

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

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

不要忘記在管理員中注冊該應(yīng)用

admin.site.register(CustomUser)

現(xiàn)在,您可以運(yùn)行服務(wù)器并在管理面板中使用您的電子郵件和密碼登錄。

關(guān)于使用Django3如何實(shí)現(xiàn)自定義用戶模型問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI