django2.0继承并重载框架自带的用户模型

本文详细介绍了在Django框架中如何自定义用户模型,包括继承AbstractUser和AbstractBaseUser,以及如何重载默认的主键和用户字段,实现自定义用户管理。

使用django建站,需要使用django自带的用户授权和管理功能,又需要自定义用户模型,于是继承并重载了默认用户模型的属性,记录如下。

在settings.py中:

# 指定默认用户模型为自定义的模型
AUTH_USER_MODEL = 'mysite.User'

 在models.py中:

from django.contrib.auth.models import AbstractUser, UnicodeUsernameValidator

class User(AbstractUser):
    username_validator = UnicodeUsernameValidator()
    username = models.CharField('用户名', max_length=20, unique=True, default='', validators=[username_validator])
    password = models.CharField('密码', max_length=128, default='')
    phone = models.CharField('手机号', primary_key=True, max_length=11, default='')

    # 这里重载了默认的主键,默认的主键是email
    EMAIL_FIELD = 'phone'
    REQUIRED_FIELDS = ['phone']

    def __str__(self):
        return '%s, %s' % (self.username, self.phone)

    class Meta(AbstractUser.Meta):
        swappable = 'AUTH_USER_MODEL'

或者更彻底的自定义:

from django.db import models
from django.contrib.auth.base_user import AbstractBaseUser


class UserManager(models.Manager):
    use_in_migrations = False

    def create_user(self, **extra_fields):
        user = self.model(**extra_fields)
        user.set_password(extra_fields['password'])
        user.save(using=self._db)
        # Do something ...
        return user


class User(AbstractBaseUser):
    username = models.CharField('用户名', max_length=100, primary_key=True)

    USERNAME_FIELD = 'username'
    objects = UserManager()

    def __str__(self):
        return self.username

    class Meta:
        verbose_name = 'user'
        verbose_name_plural = 'users'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值