23-自定义用户模型

Posted lishuntao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了23-自定义用户模型相关的知识,希望对你有一定的参考价值。

一、自定义用户模型

  Django比较好的地方就是自带用户系统,但在某些情况之下,自带的用户系统并不适合我们所创建的项目(我们可能删除某些字段,也有可能新增某些字段,或者哪些字段的信息修改必填还是允许为空),这个时候我们需要自定义用户模型。做法就是继承BaseUserManager或者继承AbstractBaseUser,然后到项目settings.py文件中指定的AUTH_USER_MODEL的用户模型类。

继承AbstractBaseUser

from datetime import datetime

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

# Create your models here.


class UserProfile(AbstractUser):
    """
    用户信息相关(自定义用户模型)
    """
    name = models.CharField(max_length=30,null=True,blank=True,verbose_name="姓名")
    birthday = models.DateField(null=True,blank=True,verbose_name="出生年月")
    gender = models.CharField(max_length=6,choices=(("male",""),("female","")),default="female",verbose_name="性别")
    mobile = models.CharField(null=True,blank=True,max_length=11,verbose_name="电话")
    email = models.EmailField(max_length=100,null=True,blank=True,verbose_name="邮箱")

    class Meta:
        verbose_name = "用户"
        verbose_name_plural = verbose_name
        #username_field = "nickname" #让用户用nickname登录 而不是username
        #required_fields = ["mobile","email","birthday"] #用户填写个人信息必须填写我们要求的字段
    
    def has_perm(self, perm, obj=None):
        """自定义用户具体的权限"""
        pass
    def has_module_perms(self, app_label):
        """自定义用户具有访问那些应用的权限"""
        pass
    def is_staff(self):
        """自定义管理员权限"""
        pass
    
    def __str__(self):
        return str(self.name)

继承BaseUserManager:

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


class MyUserManager(BaseUserManager):
   ......
    """这两个函数就是在createsuperuser 和创建用户的时候调用的两个函数(在函数里加入一些必填的字段)"""
    def create_user(self,username,password=None):
        """创建用户"""
        return user 
    def create_superuser(self,username,password):
        """创建超级用户"""
        return user

objects = MyUserManager()#关联模型类

以上是关于23-自定义用户模型的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——声明函数

VSCode自定义代码片段(vue主模板)

VSCode自定义代码片段6——CSS选择器

VS code自定义用户代码片段snippet

VSCode自定义代码片段8——声明函数

VSCode自定义代码片段——CSS动画