在Django中創建自己的自定義用戶模型
自定義用戶模型有什麼需求?
創建自己的自定義用戶模型至關重要。將來,如果要對模型進行一些更改,則可以輕松進行這些更改。不然我們可能必須對模型進行一些更改,而且代碼的某些部分也將被更改。在某些網站中,與用戶名相比,使用電子郵件進行登錄是有意義的。因此,對於程序員而言,擁有自定義用戶模型是一個好習慣。
本文將幫助大傢根據需要創建自己的自定義用戶模型。請繼續執行以下步驟。
Django
安裝- 創建Django應用
- 該應用程序的自定義模型
- 遷移數據庫
1. Django安裝
設置Django
之後,進入創建的環境。然後,我們可以通過以下命令創建Django項目。
django-admin startproject mysite
2.創建Django應用
如果發現某些網站使用瞭類似/ accounts /
的URL,它們看起來就是專業代碼。因此,我們還需要創建一個名為accounts
的應用程序,在其中管理與該帳戶有關的所有事情。因此,在當前環境中,使用以下命令創建Django
應用。
python manage.py startapp accounts
創建後,該應用將包含基本文件。
創建的文件如下所示:
accounts/ __init__.py admin.py apps.py models.py tests.py views.py
一旦創建,所有的數據庫模型代碼都應該寫在models.py
文件中。另外,不要忘記創建一個urls.py文件,該文件有助於通過帳戶應用程序路由鏈接。創建完成後,讓我們進入根據我們的需求構建自定義用戶模型的下一步。
3.該應用程序的自定義模型
因此,為瞭創建自定義用戶模型,我們需要在models.py
文件中寫下以下代碼,因為python使用對象來管理和訪問存儲在數據庫中的數據。
下面提到瞭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
用戶類包含表的字段或結構,我們在其中獲取有關用戶的一些詳細信息以及其中的某些條件。為瞭管理User類,我們有UserManager
,它將用於創建新用戶或超級用戶。就像我之前說的,這裡的用戶名字段將被替換為電子郵件。它比用戶名字段更有意義。還提到瞭必填字段。通過使用電子郵件作為用戶名字段,它會自動將電子郵件字段添加為必不可少的字段。
因此,通過UserManager
,我們可以創建一個新的普通用戶和一個超級用戶。user.set_password()
會將純文本密碼哈希為默認的哈希算法。Django
將PBKDF2與SHA-256哈希一起使用,並具有密碼擴展機制。user.save()
函數將使用字段和哈希密碼保存創建的用戶。創建自定義用戶模型很簡單。
在這裡需要註意,在創建模型之前不要遷移模型。在此之前,創建模型後,我們必須使用自定義模型更新Django
設置文件,否則Django將使用其自己的預先實現的模型。隻需在項目目錄中的settings.py文件中使用此代碼即可。
AUTH_USER_MODEL = ‘accounts.User'
設置好模型後,就該將模型遷移到數據庫瞭。
4.遷移模型
現在,我們準備通過將更改遷移到數據庫中來遷移自定義用戶模型。使用以下命令在當前環境中遷移並執行該代碼。
python manage.py makemigrations python manage.py migrate
此命令將查找Django
項目中的所有模型和模型中的更改。如果要專門為應用程序進行遷移,可以使用以下命令進行。
python manage.py makemigrations <app_name> python manage.py migrate <app_name>
可以將替換為帳戶,以僅在該應用程序上進行更改。
到此這篇關於在Django中創建自己的自定義用戶模型的文章就介紹到這瞭,更多相關Django中創建自己的自定義用戶模型內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Django一小時寫出賬號密碼管理系統
- Python Django模型詳解
- django如何根據現有數據庫表生成model詳解
- 使用Djongo模塊在Django中使用MongoDB數據庫
- 關於django連接mysql數據庫並進行數據庫的創建的問題