• Django商城项目笔记No.3用户部分-用户模型类


    Django商城项目笔记No.3用户部分-用户模型类


    Django提供了认证系统,文档资料https://yiyibooks.cn/xx/Django_1.11.6/topics/auth/index.html

    但是我们的项目中的注册,需要保存用户的手机号,所以要自定义用户模型类,需要给模型类添加额外的字段。


    Django用户模型类

    Django认证系统中提供了用户模型类User保存用户的数据,默认的User包含以下常见的基本字段

    1. username必选。 150个字符以内。 用户名可能包含字母数字_@+.-

    2. password必选。 密码的哈希及元数据。 (Django 不保存原始密码)。 原始密码可以无限长而且可以包含任意字符。

    3. first_name可选。(blank=True)。 少于等于30个字符。

    4. last_name可选(blank=True)。 少于等于30个字符。

    5. email可选(blank=True)。 邮箱地址。

    6. groupsGroup 之间的多对多关系。

    7. user_permissionsPermission 之间的多对多关系。

    8. is_staff布尔值。 指示用户是否可以访问Admin 站点。

    9. is_active布尔值。 指示用户的账号是否激活。 我们建议您将此标志设置为False而不是删除帐户;这样,如果您的应用程序对用户有任何外键,则外键不会中断。它不是用来控制用户是否能够登录。 在Django更改1.10:在旧版本中,默认is_active为False不能进行登录。

    10. is_superuser布尔值。 指定这个用户拥有所有的权限而不需要给他们分配明确的权限。

    11. last_login用户最后一次登录的时间。

    12. date_joined账户创建的时间。 当账号创建时,默认设置为当前的date/time。

    常用方法:

    • set_password(raw_password)

      设置用户的密码为给定的原始字符串,并负责密码的。 不会保存User 对象。当None 为raw_password 时,密码将设置为一个不可用的密码。

    • check_password(raw_password)

      如果给定的raw_password是用户的真实密码,则返回True,可以在校验用户密码时使用。

    管理器方法:

    管理器方法即可以通过User.objects. 进行调用的方法。

    • create_user(usernameemail=Nonepassword=None*extra_fields*)

      创建、保存并返回一个User对象。

    • create_superuser(usernameemailpassword*extra_fields*)

      与create_user() 相同,但是设置is_staff 和is_superuserTrue


    创建自定义的用户模型类

    Django认证系统中提供的用户模型类及方法很方便,我们可以使用这个模型类,但是字段有些无法满足项目需求,如本项目中需要保存用户的手机号,需要给模型类添加额外的字段。

     Django提供了django.contrib.auth.models.AbstractUser用户抽象模型类允许我们继承,扩展字段来使用Django认证系统的用户模型类。

    在应用users的models.py中定义用户的用户模型类。

    from django.db import models
    from django.contrib.auth.models import AbstractUser
    
    # Create your models here.
    
    
    class User(AbstractUser):
        """用户模型类"""
        mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号')
    
        class Meta:
            db_table = 'tb_users'
            verbose_name = '用户'
            verbose_name_plural = verbose_name
    View Code

    我们自定义的用户模型类还不能直接被Django的认证系统所识别,需要在配置文件中告知Django认证系统使用我们自定义的模型类。

    在配置文件中进行设置

    AUTH_USER_MODEL = 'users.User'

    AUTH_USER_MODEL 参数的设置以点.来分隔,表示应用名.模型类名

    注意:Django建议我们对于AUTH_USER_MODEL参数的设置一定要在第一次数据库迁移之前就设置好,否则后续使用可能出现未知错误。

    在执行数据库迁移之前,一定要先设置好AUTH_USER_MODEL 不然会出错

    执行数据库迁移

    python manage.py makemigrations
    python manage.py migrate
  • 相关阅读:
    模板实参演绎
    模板实例化
    模板中的名称
    友元函数在类中的声明在外围是不可见的
    C++ 宽字符(wchar_t)与窄字符(char)的转换
    ImageButton如何让图片按比例缩放不被拉伸
    C++模板实例化(1)
    android开发之GenyMotion与intelliJ的配置
    jacoco报告表头注释
    Spring源码工具类之StringUtils
  • 原文地址:https://www.cnblogs.com/blog-rui/p/9735739.html
Copyright © 2020-2023  润新知