五分钟了解django、drf重写user表(详细又全面的一次记录)

💖 作者:大家好,我是Clyde😜
🎉 支持我:点赞👍收藏⭐️留言📝
😇 GitHub主页:Tengxu666 Python是一门很神奇的语言, 还在学习
💻 DRF开源教程:drf_pro 更全面的Django Rest Framework 教程
欢迎star 🌟

重写DjangoUser表

Django框架在你第一次进行数据库迁移的时候会默认给你生成User表

当然你也可以选择继承默认User表来创建拥有自己专属字段的User表(必须是在第一次迁移之前⚠️)

例如:
创建User类并继承Django中的AbstractUser

from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    username = models.CharField(max_length=255, unique=True)
    email = models.EmailField(max_length=255, unique=True)
    telephone = models.CharField(max_length=11, unique=True, null=True)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ["username"]
    
    objects = UserManager()
    
    def __str__(self):
        return self.email

    class Meta:
        db_table = "user"

其中

  • USERNAME_FIELD指定的是您要将那个字段设置为账号,默认为username
  • REQUIRED_FIELDS指定的是在您使用createsuperuser命令时,需要额外输入的字段
  • str方法指定了User.objects.get方法查到指定user对象后返回的内容
  • db_table指定了数据库中存储的表名称

当您更改USERNAME_FIELD后,需要重新设置UserManager,如下所示

from django.contrib.auth.models import BaseUserManager

class UserManager(BaseUserManager):

    def create_user(self, username, email, password=None):
        if username is None:
            raise TypeError('用户应该有一个用户名')
        if email is None:
            raise TypeError('用户应该有一个电子邮件')

        user = self.model(username=username, email=self.normalize_email(email))
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self, username, email, password=None):
        if password is None:
            raise TypeError('密码不应该是None')

        user = self.create_user(username, email, password)
        user.is_superuser = True
        user.is_staff = True
        user.save()
        return

因为我的User表中,设置的USERNAME_FIELD字段为email,username同样是必填项,所以在重写create_usercreate_superuser时,需要得到username, email, password三个字段的数据。

当重构完User表后,你必须在setting.py中指定它

# 自定义用户模型
AUTH_USER_MODEL = 'authentication.User'

至此 可进行第一次数据库迁移 ✌️ ✌️

你需要完整的运行makemigrationsmigrate

如果像平时新的项目一样只运行migrate时,可能会发生数据库的关联外建错误,是因为你的User表没有被create

🎉 支持我:点赞👍收藏⭐️留言📝
📣 系列专栏:DjangoRestFramework🍁

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wxlo0.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值