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方式(关联的方式)进行用户信息扩展    
生成的两张表,会从两张表中去查
扩展的信息不会加到request.user(session)里面去。

from django.contrib.auth.models import Userclass 
Employee(models.Model):user = models.OneToOneField(User)
department = models.CharField(max_length=100)
采用AbstactUser方式扩展用户表
生成用户表一张
扩展的信息会加到request.user(session)里面去。
权限机制也保存下来了
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()    有创建创建用户和超级用户两个方法

#采用email方式注册用户,删除first_name与last_name,添加phone与qq字段
#这个时候可以继承基类,修改抽象类
class profile_user(AbstractBaseUser,PermissionsMixin):
email = models.EmailField(_('email address'), blank=True,unique = True) 这里需要添加unique,主键
is_staff = models.BooleanField(
_('staff status'),
default=False,
help_text=_('Designates whether the user can log into this admin site.'),
)
is_active = models.BooleanField(
_('active'),
default=True,
help_text=_(
'Designates whether this user should be treated as active. '
'Unselect this instead of deleting accounts.'
),
)
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

objects = UserProfileManager() 这里要定义登录superuser的username帐号,superuser

USERNAME_FIELD = 'email' 这里定义存储帐号
REQUIRED_FIELDS = [] 这里是必须要的帐号
phone = models.CharField(max_length=30)
qq = models.CharField(max_length=30)

def get_full_name(self): 需要定义这里,改变登陆发方式后这里有所改变
"""
Returns the first_name plus the last_name, with a space in between.
"""
return self.email

def get_short_name(self):
"Returns the short name for the user."
return self.email


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的字段了。

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

 






















































django用户信息扩展的更多相关文章

  1. Spring Security OAuth2.0认证授权五:用户信息扩展到jwt

    历史文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二:搭建资源服务 Spring Security OA ...

  2. Laravel wxxcx 微信小程序获取用户信息

    wxxcx 是Laravel5微信小程序登录获取用户信息扩展 部署 12345678 # 安装$ composer require iwanli/wxxcx# 注册服务# 在 /config/app. ...

  3. Python学习---Django的request扩展[获取用户设备信息]

    关于Django的request扩展[获取用户设备信息] settings.py INSTALLED_APPS = [ ... 'app01', # 注册app ] STATICFILES_DIRS ...

  4. 30、Django实战第30天:修改邮箱和用户信息

    修改个人邮箱需要完成两个接口,一个是获取验证码,一个是新的邮箱和验证码是否匹配 1.编辑users.views.py class SendEmailCodeView(LoginRequiredMixi ...

  5. Django Auth组件->扩展用户

    Auth用户 1.声明用户表 djangauth/settings.py..............................AUTH_USER_MODEL = 'app01.UserInfo' ...

  6. Django - 用户认证、用户组、用户权限

    https://www.cnblogs.com/ccorz/p/6358074.html auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和a ...

  7. 【Python】Django用户、认证、鉴权模块使用

    此文是总结Django官方网站里面的Document的文章 User authentication in Django http://www.djangoproject.com/documentati ...

  8. 面试简历书写、Flask框架介绍与快速使用、Flask演示登录页面、用户信息页面案例

    今日内容概要 面试简历编写 Flask框架介绍与安装 内容详细 1.面试简历编写 # 千万不要几个小时把简历凑出来 几天到一周 # 有没有面试机会,取决于简历写得怎么样 简历写好是第一步 # 投简历的 ...

  9. 微信快速开发框架(八)-- V2.3--增加语音识别及网页获取用户信息,代码已更新至Github

    不知不觉,版本以每周更新一次的脚步进行着,接下来应该是重构我的代码及框架的结构,有朋友反应代码有点乱,确实如此,当时写的时候只是按照订阅号来写的,后来才慢慢增加到支持API接口.目前还在开发第三方微信 ...

随机推荐

  1. C语言基础(21)-C语言编译过程及GCC参数简介

    任何C语言的编译过程可分为以下三部分: 一.预编译 在C语言中,以#开头的语句又叫预编译指令.预编译主要做以下两件事情: 1.将#include包含的头文件做简单的文本替换: 2.将代码中的注释删除. ...

  2. PHP预定义常量DIRECTORY_SEPARATOR

    PHP预定义常量DIRECTORY_SEPARATOR BY 天涯 · // DIRECTORY_SEPARATOR是一个显示系统分隔符的命令,DIRECTORY_SEPARATOR是PHP的内部常量 ...

  3. Masonry介绍与使用实践:快速上手Autolayout【转载】

    MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时代 win ...

  4. centos6.5下Nginx的安装

    此处主要介绍通过配置Nginx的官方yum源,通过yum安装Nginx.参考官网:http://nginx.org/en/linux_packages.html 主要分为以下步骤: 1.配置yum源: ...

  5. c 编译异常 switch 之a label can only be part of a statement and a declaration is not a statement

    client.c:996: error: a label can only be part of a statement and a declaration is not a statement sw ...

  6. 用记事本写的java程序引用jar文件

    1.将须要用的jar文件和java程序复制到同一个文件文件夹下 2.进行编译.编译的命令:javac -cp log4j-1.2.15.jar A.java 3.进行运行.运行的命令:java -cp ...

  7. tonymillion/Reachability的使用

    tonymillion/Reachability是GitHub上的一个开源工具类,目測是依据Apple的Reachability Demo改写而成. 该类能够測试到某一网络.主机等的可达性,支持Blo ...

  8. 【转】 VC++ 关闭程序后任务管理器进程中进程仍然存在的解决方法

    转载出处:http://blog.csdn.net/zac_sian/article/details/50809084 可以从以下两个方面进行查找! 1.程序开启了进程,进程中使用了while(1), ...

  9. python3----splitlines

    Python中的splitlines用来分割行.当传入的参数为True时,表示保留换行符 \n.通过下面的例子就很明白了: mulLine = """Hello!!! W ...

  10. Android无线测试之—UiAutomator UiDevice API介绍八

    获取包名.开启通知栏.快速设置.获取布局文件的方法 一.包名.通知栏.快速设置.布局文件等相关知识: 1)包名:标示应用的符号,每个应用的名字 2)通知栏:从主界面的顶端向下拉,就可以打开通知栏 3) ...