潭州課堂25班:Ph201805201 django 專案 第七課 使用者模型設計 (課堂筆記
阿新 • • 發佈:2018-12-04
在 user 的應用中的 models.py:
檢視類的結構:
檢視類的繼承關係,
使用者模型設計 :
from django.db import models from django.contrib.auth.models import AbstractUser, UserManager as _UserManager class UserManager(_UserManager): """ define user manager for modifing 'no need email' when 'python manager.py createsuperuser ' """ def create_superuser(self, username, password, email=None, **extra_fields): super(UserManager, self).create_superuser(username=password, password=password, email=email, **extra_fields) class Users(AbstractUser): """ add mobile、email_active fields to Django users models. """ objects = UserManager() # A list of the field names that will be prompted for # when creating a user via the createsuperuser management command. REQUIRED_FIELDS = ['mobile'] # help_text在api介面文件中會用到 # verbose_name在admin站點中會用到 mobile = models.CharField(max_length=11, unique=True, verbose_name="手機號", help_text='手機號', error_messages={'unique': "此手機號已註冊"} # 指定報錯的中文資訊 ) email_active = models.BooleanField(default=False, verbose_name='郵箱驗證狀態') class Meta: db_table = "tb_users" # 指明資料庫表名 verbose_name = "使用者" # 在admin站點中顯示的名稱 verbose_name_plural = verbose_name # 顯示的複數名稱 def __str__(self): # 列印物件時呼叫 return self.username
在settings.py檔案中新增如下配置:
# 自定義使用者模型
AUTH_USER_MODEL = 'users.Users'
這樣就為 django 指定用自己的使用者模型
檢視資料庫:
在這個專案中,不需要郵箱地址, 而在繼承了這個類後,有個郵箱 地址的欄位,有手機號欄位,
所以要對模型進行修改,
繼承並重寫 UserManager
from django.db import models from django.contrib.auth.models import AbstractUser,UserManager as _UserManager # # # Create your models here. class UserManager(_UserManager): ''' 重寫 UserManager ''' def create_superuser(self, username, password, email=None, **extra_fields): super(UserManager, self).create_superuser(username=password, password=password, email=email, **extra_fields) class Users(AbstractUser): ''' 在 AbstractUser 之上新增手機號欄位 ''' objects = UserManager() REQUIRED_FIELDS = ['mobile'] mobile = models.CharField(max_length=11, unique=True, verbose_name="手機號", help_text='手機號', error_messages={'unique': "此手機號已註冊"} # 指定報錯的中文資訊 ) email_active = models.BooleanField(default=False, verbose_name='郵箱驗證狀態') # 內部類 class Meta: db_table = "tb_users" # 指明資料庫表名 verbose_name = "使用者" # 在admin站點中顯示的名稱 verbose_name_plural = verbose_name # 顯示的複數名稱 def __str__(self): # 列印物件時呼叫 return self.username
嘗試 進行建立超級使用者操作: createsuperuser