django用户信息扩展

Django封装了好多东西,拿来用就可以了,帮我们封装类用户的登录认证,用户的表
所以Django自带有用户表,当扩展用户表后一些表就会被替换

用户认证相关的    功能放在 django.contrib.auth 的一个 app 当中,在INSTALLED_APPS中可以看到
主要处理用户信息,权限,认证


Django遵循 开闭原则
所以不修改源代码,方便框架升级
采用新增的方式 继承源代码

auth_user 里面的 
is_staff  是否可以登录admin后台
is_active账户是否激活,可以登录后台
date_joined帐号创建时间
last_login上一次登录的时间

这些默认用户信息的引用库的位置 django.contrib.auth.models 进行引用
Django\contrib\auth\models.py 里面

配置完之后需要在settings.py里面进行设置
AUTH_USER_MODEL = 'app.类名'

采用Profile方式(关联的方式)进行用户信息扩展    
 
  
 
  

from django.contrib.auth.models import Userclass 
Employee(models.Model):user = models.OneToOneField(User)
department = models.CharField(max_length=100)
采用 AbstactUser方式扩展用户表
 
  
 
  
 
 
 
   
class profile_user(AbstractUser):
 
   
    phone = models.CharField(max_length=30)
 
   
    qq = models.CharField(max_length=30)
 
   

 
   
    class Meta:
 
   
        db_table = 'profile_user'
 
  

 
  
在User当中
class Meta(AbstractUser.Meta):
swappable = 'AUTH_USER_MODEL'
所以 采用继承的方式扩展用户字段需要在settings里面设置 AUTH_USER_MODEL   'log.User'
因为就有两个User model 了,所以需要说明

 
  
clas Meta:
         db_table = 'profile_user'
定义了表的名字,不会在数据表当中加上额外的字段
User ->AbstactUser->AbstractBaseUser(基类) PermissionMixin(控制权限)

abstract = True 表明为Django抽象类,在Meta当中加上这个使得这个model不会再数据库当中生成数据表

AbstartUser还 有一些方法可以给用户发送邮件

objects = UserManager()     有创建创建用户和超级用户两个方法

#class profile_user:
= 'email address'=True= True= 'staff status'=False='Designates whether the user can log into this admin site.'= 'active'=True='Designates whether this user should be treated as active. '
'Unselect this instead of deleting accounts.'
= 'date joined'== superuser的username帐号,superuser
= 'email'          = = =30= =30def get_full_nameself:                 """
Returns the first_name plus the last_name, with a space in between.
"""
return selfdef get_short_nameself:
"Returns the short name for the user."
return self


from django.contrib.auth.models import AbstractBaseUser,User,AbstractUser,\
UserManager,PermissionsMixin,BaseUserManager
还需要导入各种的Model


继承扩展用户这种方式需要在admin当中注册User
from information.models import profile_user
# Register your models here.

admin.site.register(profile_user)



from django.contrib.auth.models import AbstractUser

# Create your models here.
class User(AbstractUser):
username = models.CharField(max_length=30, verbose_name='帐号')
class Meta:
verbose_name = '用户'
verbose_name_plural = verbose_name

像这种继承过来的,父类里面已经有username,子类就不能覆盖原有的username的字段了。

扩展用户信息的方式。要么继承的方式,要么关联的方式。

801928-20160808154727246-46405974.png 


























































转载于:https://www.cnblogs.com/wuqingzangyue/p/5749599.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值