在Django中創(chuàng)建自己的自定義用戶模型
自定義用戶模型有什么需求?
創(chuàng)建自己的自定義用戶模型至關(guān)重要。將來(lái),如果要對(duì)模型進(jìn)行一些更改,則可以輕松進(jìn)行這些更改。不然我們可能必須對(duì)模型進(jìn)行一些更改,而且代碼的某些部分也將被更改。在某些網(wǎng)站中,與用戶名相比,使用電子郵件進(jìn)行登錄是有意義的。因此,對(duì)于程序員而言,擁有自定義用戶模型是一個(gè)好習(xí)慣。
本文將幫助大家根據(jù)需要?jiǎng)?chuàng)建自己的自定義用戶模型。請(qǐng)繼續(xù)執(zhí)行以下步驟。
Django
安裝- 創(chuàng)建Django應(yīng)用
- 該應(yīng)用程序的自定義模型
- 遷移數(shù)據(jù)庫(kù)
1. Django安裝
設(shè)置Django
之后,進(jìn)入創(chuàng)建的環(huán)境。然后,我們可以通過(guò)以下命令創(chuàng)建Django項(xiàng)目。
django-admin startproject mysite
2.創(chuàng)建Django應(yīng)用
如果發(fā)現(xiàn)某些網(wǎng)站使用了類似/ accounts /
的URL,它們看起來(lái)就是專業(yè)代碼。因此,我們還需要?jiǎng)?chuàng)建一個(gè)名為accounts
的應(yīng)用程序,在其中管理與該帳戶有關(guān)的所有事情。因此,在當(dāng)前環(huán)境中,使用以下命令創(chuàng)建Django
應(yīng)用。
python manage.py startapp accounts
創(chuàng)建后,該應(yīng)用將包含基本文件。
創(chuàng)建的文件如下所示:
accounts/ ? ? __init__.py ? ? admin.py ? ? apps.py ? ? models.py ? ? tests.py ? ? views.py
一旦創(chuàng)建,所有的數(shù)據(jù)庫(kù)模型代碼都應(yīng)該寫(xiě)在models.py
文件中。另外,不要忘記創(chuàng)建一個(gè)urls.py文件,該文件有助于通過(guò)帳戶應(yīng)用程序路由鏈接。創(chuàng)建完成后,讓我們進(jìn)入根據(jù)我們的需求構(gòu)建自定義用戶模型的下一步。
3.該應(yīng)用程序的自定義模型
因此,為了創(chuàng)建自定義用戶模型,我們需要在models.py
文件中寫(xiě)下以下代碼,因?yàn)閜ython使用對(duì)象來(lái)管理和訪問(wèn)存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)。
下面提到了models.py文件的代碼:
from django.db import models from django.contrib.auth.models import AbstractBaseUser , BaseUserManager import uuid class UserManager(BaseUserManager): ? ? def create_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) ? ? ? ? return user ? ? def create_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) ? ? ? ? return user class User(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): ? ? ? ? return self.email + ", " + self.firstname ? ? def has_perm(self, perm, obj = None): ? ? ? ? return self.is_admin ? ? def has_module_perms(self, app_label): ? ? ? ? return True
用戶類包含表的字段或結(jié)構(gòu),我們?cè)谄渲蝎@取有關(guān)用戶的一些詳細(xì)信息以及其中的某些條件。為了管理User類,我們有UserManager
,它將用于創(chuàng)建新用戶或超級(jí)用戶。就像我之前說(shuō)的,這里的用戶名字段將被替換為電子郵件。它比用戶名字段更有意義。還提到了必填字段。通過(guò)使用電子郵件作為用戶名字段,它會(huì)自動(dòng)將電子郵件字段添加為必不可少的字段。
因此,通過(guò)UserManager
,我們可以創(chuàng)建一個(gè)新的普通用戶和一個(gè)超級(jí)用戶。user.set_password()
會(huì)將純文本密碼哈希為默認(rèn)的哈希算法。Django
將PBKDF2與SHA-256哈希一起使用,并具有密碼擴(kuò)展機(jī)制。user.save()
函數(shù)將使用字段和哈希密碼保存創(chuàng)建的用戶。創(chuàng)建自定義用戶模型很簡(jiǎn)單。
在這里需要注意,在創(chuàng)建模型之前不要遷移模型。在此之前,創(chuàng)建模型后,我們必須使用自定義模型更新Django
設(shè)置文件,否則Django將使用其自己的預(yù)先實(shí)現(xiàn)的模型。只需在項(xiàng)目目錄中的settings.py文件中使用此代碼即可。
AUTH_USER_MODEL = ‘a(chǎn)ccounts.User'
設(shè)置好模型后,就該將模型遷移到數(shù)據(jù)庫(kù)了。
4.遷移模型
現(xiàn)在,我們準(zhǔn)備通過(guò)將更改遷移到數(shù)據(jù)庫(kù)中來(lái)遷移自定義用戶模型。使用以下命令在當(dāng)前環(huán)境中遷移并執(zhí)行該代碼。
python manage.py makemigrations python manage.py migrate
此命令將查找Django
項(xiàng)目中的所有模型和模型中的更改。如果要專門為應(yīng)用程序進(jìn)行遷移,可以使用以下命令進(jìn)行。
python manage.py makemigrations <app_name> python manage.py migrate <app_name>
可以將替換為帳戶,以僅在該應(yīng)用程序上進(jìn)行更改。
到此這篇關(guān)于在Django中創(chuàng)建自己的自定義用戶模型的文章就介紹到這了,更多相關(guān)Django中創(chuàng)建自己的自定義用戶模型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中使用__new__實(shí)現(xiàn)單例模式并解析
單例模式是一個(gè)經(jīng)典設(shè)計(jì)模式,簡(jiǎn)要的說(shuō),一個(gè)類的單例模式就是它只能被實(shí)例化一次,實(shí)例變量在第一次實(shí)例化時(shí)就已經(jīng)固定。 這篇文章主要介紹了Python中使用__new__實(shí)現(xiàn)單例模式并解析 ,需要的朋友可以參考下2019-06-06python數(shù)據(jù)庫(kù)PooledDB連接池初始化使用示例
這篇文章主要為大家介紹了python數(shù)據(jù)庫(kù)PooledDB連接池初始化使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08jupyter notebook運(yùn)行命令顯示[*](解決辦法)
這篇文章主要介紹了jupyter notebook運(yùn)行命令顯示[*],文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05pandas把所有大于0的數(shù)設(shè)置為1的方法
今天小編就為大家分享一篇pandas把所有大于0的數(shù)設(shè)置為1的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Pytorch中torchtext終極安裝方法以及常見(jiàn)問(wèn)題
torchtext是pytorch框架中用于文本處理的,下面這篇文章主要給大家介紹了關(guān)于Pytorch中torchtext終極安裝方法以及常見(jiàn)問(wèn)題的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05解決Pycharm中import時(shí)無(wú)法識(shí)別自己寫(xiě)的程序方法
今天小編就為大家分享一篇解決Pycharm中import時(shí)無(wú)法識(shí)別自己寫(xiě)的程序方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05超級(jí)實(shí)用的8個(gè)Python列表技巧
這篇文章主要介紹了實(shí)用的8個(gè)Python列表技巧,幫助大家更好的理解和學(xué)習(xí)python列表的知識(shí),感興趣的朋友可以了解下2020-08-08Python簡(jiǎn)單計(jì)算給定某一年的某一天是星期幾示例
這篇文章主要介紹了Python簡(jiǎn)單計(jì)算給定某一年的某一天是星期幾,涉及Python基于蔡勒公式的簡(jiǎn)單日期數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2018-06-06