• django-替代为自定义的User model


    https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model

    Substituting a custom User model

    django允许重写默认的user mode,提供了一个setting 值,来指向自定义的model,

    AUTH_USER_MODEL = 'users.User'
    #users是app名
    #User是用户model
    

      

    Using a custom user model when starting a project

     如果你开始一个新项目,设定一个自定义的user model是更值得推荐的,即使默认的user model已经满足需求,这个model和默认的user model是一致的,但是可以使你在有需要的时候去自定义它。

    from django.contrib.auth.models import AbstractUser
    
    class User(AbstractUser):
        pass
    

      

    不要忘记让AUTH_USER_MODEL指向它,记得在创建任何migrations 或者运行migrate 之前做这个事情。

    另外,在app的admin.py里注册这个model

    from django.contrib import admin
    from django.contrib.auth.admin import UserAdmin
    from .models import User
    
    admin.site.register(User, UserAdmin)
    

      

    Specifying a custom user model

    把所有用户相关的信息放在一个模型中,避免到相关模型中进行复杂的查询。

    如果使用默认的认证后端,你的model必须有一个唯一字段,用来标识,可以是一个username,或者email地址,或者其他唯一键。

    构建一个兼容的自定义user model最简单的方法是从AbstractBaseUser.AbstractBaseUser 继承,提供了user model 的核心实现。包括哈希散列密码和token化的密码重置。

    一些细节上的实现:

    class MyUser(AbstractBaseUser):
        identifier = models.CharField(max_length=40, unique=True)
        ...
        USERNAME_FIELD = 'identifier'    #描述用户模型上用作唯一标识符的字段名称的字符串。这通常是某种用户名,但也可以是电子邮件地址或任何其他唯一标识符。
    

      

    class MyUser(AbstractBaseUser):
        ...
        date_of_birth = models.DateField()
        height = models.FloatField()
        ...
        REQUIRED_FIELDS = ['date_of_birth', 'height']    #通过createsuperuser管理命令创建用户时将提示的字段名称列表。系统将提示用户为每个字段提供值。
    

      

    is_active

    一个布尔属性,指示用户是否被视为“活动”。此属性作为AbstractBaseUser默认属性提供True

    以下属性和方法可用于以下任何AbstractBaseUser的子类

     set_password(raw_password)

    把给到的原始密码保存为密码哈希

    Writing a manager for a custom user model

    您还应该为您的用户模型定义自定义管理器。如果您的用户模型只定义usernameemailis_staffis_activeis_superuser, last_login,和date_joined字段,和Django默认的一样,你可以只安装Django的UserManager但是,如果您的用户模型定义了不同的字段,则需要定义一个自定义管理器,拓展BaseUserManager 提供的另外两种方法:

     class models.CustomUserManager

    create_user()的原型应该接受用户名字段,加上所有必填字段作为参数。例如,如果您的用户模型用email作为用户名字段,并且date_of_birth作为必填字段,create_user则应定义为:

     
    def create_user(self, email, date_of_birth, password=None):
        # create user here
        ...
    

      

  • 相关阅读:
    [原]终于做了一个登陆页
    JDK 1.7环境变量的配置
    值类型和引用类型讲解,本人在大学时候的笔记,写给新手
    CDays2 习题一 (改进函数)及相关内容解析。Python 基础教程
    Winedt 7.0 Build: 20120321 永久试用方法 Winedt 7.0 破解
    Arduino 笔记。开篇
    What we find changes who we become.
    Python 中的POST/GET包构建以及随机字符串的生成。Python 初级应用
    CDays–2 完成核心功能 CMD模块 Python基础教程 cmd cli
    Python HDB3 AMI 编码与解码
  • 原文地址:https://www.cnblogs.com/jabbok/p/11250063.html
Copyright © 2020-2023  润新知