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()#关联模型类
posted @ 2019-12-17 17:33  一知.半解  阅读(...)  评论(...编辑  收藏