1. 程式人生 > >潭州課堂25班:Ph201805201 django 專案 第七課 使用者模型設計 (課堂筆記

潭州課堂25班:Ph201805201 django 專案 第七課 使用者模型設計 (課堂筆記

 在 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