您好,登錄后才能下訂單哦!
使用Django3如何實現自定義用戶模型?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
首先,創建一個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, 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屬性。 在其中輸入錯誤可能會導致調試困難。
我們在這里做了什么?
我們已經為我們的用戶模型進行了管理。 在其中,我們制作了兩個函數,分別稱為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)
現在,您可以運行服務器并在管理面板中使用您的電子郵件和密碼登錄。
關于使用Django3如何實現自定義用戶模型問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。