• 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()#关联模型类
  • 相关阅读:
    ShellExecuteEx 函数说明
    npm
    Byte和char
    如何高效阅读一个项目
    C++中慎用malloc
    #ifdef
    string
    C++与C混合编译
    git@github.com: Permission denied (publickey).
    connect to host github.com port 22: Connection refused
  • 原文地址:https://www.cnblogs.com/lishuntao/p/12055697.html
Copyright © 2020-2023  润新知