使用django的认证系统

User 对象

User是认证系统的核心。典型代表是用户和你的站点进行交互还有限制访问、注册用户等等。django认证框架中,只存在一个User类,像'superuser'和'staff'等等都是User的对象,只是某些属性不一样而已。

class User(AbstractUser):
"""
Users within the Django authentication system are represented by this
model. Username, password and email are required. Other fields are optional.
"""
class Meta(AbstractUser.Meta):
swappable = 'AUTH_USER_MODEL'

User继承自一个抽象基类,提供了User模块所有的功能

class AbstractUser(AbstractBaseUser, PermissionsMixin):
"""
An abstract base class implementing a fully featured User model with
admin-compliant permissions. Username and password are required. Other fields are optional.
"""
username = models.CharField(
_('username'),
max_length=30,
unique=True,
help_text=_('Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[
validators.RegexValidator(
r'^[\w.@+-]+$',
_('Enter a valid username. This value may contain only '
'letters, numbers ' 'and @/./+/-/_ characters.')
),
],
error_messages={
'unique': _("A user with that username already exists."),
},
)
first_name = models.CharField(_('first name'), max_length=30, blank=True)
last_name = models.CharField(_('last name'), max_length=30, blank=True)
email = models.EmailField(_('email address'), blank=True)
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 = UserManager() USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email'] class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
abstract = True def get_full_name(self):
"""
Returns the first_name plus the last_name, with a space in between.
"""
full_name = '%s %s' % (self.first_name, self.last_name)
return full_name.strip() def get_short_name(self):
"Returns the short name for the user."
return self.first_name def email_user(self, subject, message, from_email=None, **kwargs):
"""
Sends an email to this User.
"""
send_mail(subject, message, from_email, [self.email], **kwargs)

API

默认的用户类字段有如下:

username  最多三十个字符

first_name

last_name

email

password

group

user_permissions

is_staff  布尔值,用户能否访问管理后台页面

is_active  布尔值。它的作用并不是用来决定某用户是否有权限访问网站,而是用在其他地方:如匿名用户默认就被设置为了 is_active = False

is_superuser 布尔值 是否是超级用户

last_login  最后一次登录时间(1.8+如果用户从来没有登陆过,那么该字段将被置为null之前都是置为当前时间)

date_joined 用户创建时间

方法:

get_username() 使用这个方法返回用户名,而不是直接引用User的username属性

is_anonymous() 总是返回False  是否是匿名用户

is_authenticated() 总是返回True 用户是否经过验证。不代表任何权限也不检查用户是否活跃或者是是否拥有一个回话。 当你检测该用户是否已经登录时可以使用该方法

get_full_name()  获得全名 first_name last_name

get_short_name() 返回first_name

set_password(raw_passwrod) 设置用户密码,不保存User 对象。当raw_password为空时,它做的和set_unusable_password()一样

set_unusable_password()  标记用户没有设置密码,这和设置了一个空字符密码的情形不一样,check_password()在检查这个用户是将永远不会返回True。你用其他的认证源的时候,可以使用这个方法。

check_password(raw_password) 检查密码,如果密码正确返回True

has_usable_password()  如果set_unusable_password()被调用之后,该方法返回False
get_group_permissions(obj=None) 返回用户所在组所拥有的权限。如果传入了参数,那么只返回该组的权限。一个字符串组成的集合。

get_all_permissions(obj=Noe) 返回用户所有的权限,包括自己本身的权限和所在组的权限。如果传入特定参数,那么只返回该组的权限。一个字符串集合

has_perms(perm,obj=None) 如果用户有指定权限,那么就返回True。如果用户被设置为了inactive,那么该方法永远返回False。默认是检查用户对某个model

的权限,如果传入和指定的obj那么只检查用户对该obj是否有权限。

has_module_perms(package_name)  只要用户对某APP有任何的权限,那么返回True。同样,如果用户被设置了inactive,那么永远返回False

email_user(subject,message,from_email=None,**kwargs) 发送邮件。from_email如果没有指定那么django使用DEFAULT_FROM_EMAIL指定的用户

Manger(每个model一个默认的manager,默认名为:objects)

方法:

create_user(username,email=None,password=None,**extra_fields)

创建、保存并返回一个User对象

from django.contrib.auth.models import User
>>> user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')

如果配置了用户名和密码,那么该用户的is_active=True,如果没有设置password那么将会调用set_unusable_password,用户将被置为is_active=False(猜测,待验证)

**extra_fields 用于自定义User模型。是User的__init__参数

create_superuser(username,email,password,**extra_fields) 创建超级用户

python  manage.py changepassword username
#更改指定用户密码,如果未指定用户,更改当前系统用户的密码,注意:该系统用户名可能不存在在该project中。例如:如果不提供用户名,会修改我电脑用户名的账户密码,提示错如:CommendError:user 'an' does not exist
>>> from django.contrib.auth.models import User
>>> u = User.objects.get(username='john')
>>> u.set_password('new password')
>>> u.save()
如果启用了SessionAuthenticationMiddleware,那么更改密码,会退出该用户的所有用户回话。

authenticate()

验证用户名和密码,如果成功返回一个 User 对象,否则返回 None

User对象有两个ManyToManyField,分别是:groups和user_permissions

myuser.groups = [group_list]
myuser.groups.add(group, group, ...)
myuser.groups.remove(group, group, ...)
myuser.groups.clear()
myuser.user_permissions = [permission_list]
myuser.user_permissions.add(permission, permission, ...)
myuser.user_permissions.remove(permission, permission, ...)
myuser.user_permissions.clear()

AnonymouseUser匿名用户

django.contrib.auth.models.AnonymouseUser 

id 总是None

username 总是 空字符串

get_username 总是返回空字符串

is_staff 和is_superuser 总是返回False

is_active 总是返回False

groups和user_permissions总是空的

is_anonymous() 返回True (User返回False)

is_authenticated()返回False (User返回Ture)

set_password(),check_password,save(),delete()引发NotImplementedError.错误

django 认证系统--2的更多相关文章

  1. Django认证系统auth认证

    使用Django认证系统auth认证 auth认证系统可以处理范围非常广泛的任务,且具有一套细致的密码和权限实现.对于需要与默认配置不同需求的项目,Django支持扩展和自定义认证;会将用户信息写入到 ...

  2. django认证系统 Authentication

    Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. Django的认证系统包含了身份验证和权限管理两部分.简单地说,身份验证用于核实某个用户是否合法,权限管理 ...

  3. django 认证系统--3

    WEB request中的认证 django使用sessions和middleware和reqeust对象联系在一起 它们通过给每一个reqeust请求添加一个request.user属性来代表当前用 ...

  4. Django认证系统并不鸡肋反而很重要

    在使用django-admin startproject创建项目后,Django就默认安装了一个采用session实现的认证系统.这是Django相比于其他框架的一大特点:自带认证系统,开箱即用.有人 ...

  5. 自定义Django认证系统的技术方案

    Django已经提供了开箱即用的认证系统,但是可能并不满足我们的个性化需求.自定义认证系统需要知道哪些地方可以扩展,哪些地方可以替换.本文就来介绍自定义Django认证系统的相关技术细节. 自定义认证 ...

  6. django 认证系统--1

    django的认证系统提供认证和授权两种功能 认证系统包括如下部分: 1.Users 2.Permissions 主要是以 YES/NO 的形式反映一个用户是否能够做某事 3.Groups:就是对多个 ...

  7. Django认证系统实现的web页面

    结合数据库.ajax.js.Djangoform表单和认证系统的web页面 一:数据模块 扩展了Django中的user表,增加了自定义的字段 from django.db import models ...

  8. django认证系统-user对象(创建,改密,认证)

    User对象 User对象是认证系统的核心.它们通常表示与你的站点进行交互的用户,并用于启用限制访问.注册用户信息和关联内容给创建者等.在Django的认证框架中只存在一种类型的用户,因此诸如'sup ...

  9. Django认证系统

    一.cooie与session 1.1 cookie与session cooie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又要保持状态,因此cookie就是在这样的一个场 ...

随机推荐

  1. ORACLE 通过连接查询更新 update select

    注意:  关键的地方是where 语句的加入. 在11G中, 如果不加11G , 或造成除匹配的行数更新为相应的值之后, 其余的会变成负数. 所以,执行前需要测试, 普通办法就是:  先查看需要更新的 ...

  2. 您无法登陆系统。原因可能是您的用户记录或所属的业务部门在Microoft Dynamics CRM中已被禁用

    问题发生在CRM 4.0 上 1 用户所在办事处及办事处上级被禁用. 2 如果已经重新启用了,还是报这个错误. 可以把停用的办事处及相关下级再重新--停用--启用一次试试. 3 如果还是报错,查看是否 ...

  3. WebUploader 手机端上传图片(转)

    https://blog.csdn.net/loserorleader/article/details/50395040

  4. C#语言时间

    string x = "abcdefg"; 定义字符串 int length = x.Length; 定义长度 string y = x.Substring(1, 2); 意思的从 ...

  5. RecyclerView.Adapter封装,最简单实用的BaseRecyclerViewAdapter;只需重写一个方法,设置数据链式调用;

    之前对ListView的BaseAdapter进行过封装,只需重写一个getView方法: 现在慢慢的RecyclerView成为主流,下面是RecyclerView.Adapter的封装: Base ...

  6. mysql-5.7.16-winx64解压版安装超详细图文教程

    1.安装: 将下载的mysql-5.7.16-winx64压缩包解压后的整个目录放在自己喜欢的位置,我的放在D盘根目录下 2.配置: 进入mysql-5.7.16-winx64目录,将里面的my-de ...

  7. java开发_""和null的区别

    转自:http://www.cnblogs.com/hongten/archive/2012/11/08/java_null.html#undefined 在代码中: 1 //name可以为" ...

  8. jquery前期总结,及实例

    一.元素查找 1.选择器 id=d------------------------------------------>$("#d") class=c1----------- ...

  9. ubuntu 16042 安装过程

    IDE接口的硬盘被称为hd SCSI和SATA接口的硬盘则被称为sd 第1块硬盘称为sda, 第2块硬盘称为sdb 一块硬盘最多有4个主分区,主分区以外的分区称为扩展分区,硬盘可以没有扩展分区,但是一 ...

  10. gentoo AR9285 BCM57780 安装驱动

    首先使用启动光盘启动, 然后 mount /dev/sda4 /mnt/gentoo 挂载硬盘 lspci -v 1>/mnt/gentoo/root/lspci_v.txt 输出信息到文件. ...