• 潭州课堂25班:Ph201805201 django 项目 第七课 用户模型设计 (课堂笔记


     在 user 的应用中的 models.py:

    导入 dango 自带的用户模型

    from django.contrib.auth.models import AbstractUser,UserManager as _UserManager

    在主目录下的配置文件中加入:
    # 自定义用户模型
    AUTH_USER_MODEL = 'users.Users'

    查看类的结构:

    查看类的继承关系,

     用户模型设计 :

    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

    补充:

    对 base.html 文件中的路径对应修改:

  • 相关阅读:
    适配器模式
    代理模式
    单例模式
    构建者(建造者)模式
    js Math方法
    补零
    js中十进制与二进制、八进制、十六进制的互相转换
    js生成一个范围内随机数Math.random
    js不改变原数组的情况下取数值数组的最大值和最小值
    自己封装方法,功能跟数组的indexof一样
  • 原文地址:https://www.cnblogs.com/gdwz922/p/10061993.html
Copyright © 2020-2023  润新知