Django3中的自定義用戶模型實(shí)例詳解
介紹
嗨,在這篇文章中,我們將學(xué)習(xí)在Django 3中創(chuàng)建自定義用戶模型,并且還將更改Django Admin的默認(rèn)登錄功能。 我們將使用電子郵件和密碼登錄。
動(dòng)機(jī)
我必須為我的應(yīng)用程序創(chuàng)建一個(gè)“自定義用戶”,我能夠創(chuàng)建模型,但問題是createsuperuser命令無法正常工作。 為了調(diào)試它,我不得不做大量研究,問題是當(dāng)時(shí)大多數(shù)資源已經(jīng)過時(shí),所以我決定寫這篇文章。
我做了一個(gè)GitHub倉庫,所以如果您愿意,可以直接使用它(這里有說明)
讓我們開始吧
首先,創(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ù)器并在管理面板中使用您的電子郵件和密碼登錄。
如果您有任何建議,請告訴我。
git:https://github.com/theshubhagrwl/django_custom_user_app
總結(jié)
到此這篇關(guān)于Django3中的自定義用戶模型的文章就介紹到這了,更多相關(guān)Django3自定義用戶模型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)用戶名密碼校驗(yàn)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)用戶名密碼校驗(yàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03跟老齊學(xué)Python之玩轉(zhuǎn)字符串(1)
本文主要講訴了字符串的定義,變量鏈接到字符串,以及對字符串的簡單操作,都是些非?;A(chǔ)的東西,適合零基礎(chǔ)的Pythoner學(xué)習(xí),覺得有用的話,多鼓鼓掌吧2014-09-09Python 批量讀取文件中指定字符的實(shí)現(xiàn)
這篇文章主要介紹了Python 批量讀取文件中指定字符的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Django模板獲取field的verbose_name實(shí)例
這篇文章主要介紹了Django模板獲取field的verbose_name實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python列表切片操作實(shí)例探究(提取復(fù)制反轉(zhuǎn))
在Python中,列表切片是處理列表數(shù)據(jù)非常強(qiáng)大且靈活的方法,本文將全面探討Python中列表切片的多種用法,包括提取子列表、復(fù)制列表、反轉(zhuǎn)列表等操作,結(jié)合豐富的示例代碼進(jìn)行詳細(xì)講解2024-01-01解決Python中導(dǎo)入自己寫的類,被劃紅線,但不影響執(zhí)行的問題
這篇文章主要介紹了解決Python中導(dǎo)入自己寫的類,被劃紅線,但不影響執(zhí)行的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07