Django用户认证系统 User对象解析

 更新时间:2019年08月02日 09:25:01   作者:再见紫罗兰  
这篇文章主要介绍了Django用户认证系统 User对象解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

User对象

User对象是认证系统的核心。用户对象通常用来代表网站的用户,并支持例如访问控制、注册用户、关联创建者和内容等。在Django认证框架中只有一个用户类,例如超级用户('superusers')或('staff')用户只不过是相同用户对象设置了不同属性而已。

缺省字段Fields

username

用户名,必需字段。30个字符或更少,可以包含 _, @, +, . 和 - 字符。

first_name

可选。 30 characters or fewer.

last_name

可选。 30 characters or fewer.

email

邮箱,可选。 Email address.

password

密码,必需。Django不是以明文存储密码的,而是存储哈希值。

groups

用户组。Many-to-many relationship to Group

user_permissions

用户权限。Many-to-many relationship to Permission

groups = models.ManyToManyField(Group, verbose_name=_('groups'),
  blank=True, help_text=_('The groups this user belongs to. A user will '
              'get all permissions granted to each of '
              'their groups.'),
  related_name="user_set", related_query_name="user")
user_permissions = models.ManyToManyField(Permission,
  verbose_name=_('user permissions'), blank=True,
  help_text=_('Specific permissions for this user.'),
  related_name="user_set", related_query_name="user")

is_staff

Boolean。决定用户是否可以访问admin管理界面。默认False。

is_active

Boolean。 用户是否活跃,默认True。一般不删除用户,而是将用户的is_active设为False。

is_superuser

Boolean。默认False。当设为True时,用户获得全部权限。

def has_perm(self, perm, obj=None):
  """
  Returns True if the user has the specified permission. This method
  queries all available auth backends, but returns immediately if any
  backend returns True. Thus, a user who has permission from a single
  auth backend is assumed to have permission in general. If an object is
  provided, permissions for this specific object are checked.
  """
 
  # Active superusers have all permissions.
  if self.is_active and self.is_superuser:
    return True
 
  # Otherwise we need to check the backends.
  return _user_has_perm(self, perm, obj)

last_login

上一次的登录时间,为datetime对象,默认为当时的时间。

user.last_login = timezone.now()

date_joined

用户创建的时间

方法Methods

is_anonymous()

是否是匿名用户。

is_authenticated()

用户是否通过验证,登陆。

get_full_name()

返回first_name plus the last_name, with a space in between.

get_short_name()

返回first_name.

set_password(raw_password)

设置密码。

check_password(raw_password)

验证密码。

get_group_permissions(obj=None)

返回用户组权限的集合。

get_all_permissions(obj=None)

返回用户所有的权限集合。

has_perm(perm, obj=None)

用户是否具有某个权限。perm的格式是 "<app label>.<permission codename>".

has_perms(perm_list, obj=None)

用户是否具有权限列表中的每个权限。

创建用户

由于User对象的密码不是明文存储的,所以创建User对象时与通常的Model create不同,需用内置的create_user()方法。

>>> from django.contrib.auth.models import User
>>> user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
 
# At this point, user is a User object that has already been saved
# to the database. You can continue to change its attributes
# if you want to change other fields.
>>> user.last_name = 'Lennon'
>>> user.save()

当然也可以在admin界面中添加用户。

创建superusers

$ python manage.py createsuperuser --username=joe --email=joe@example.com

修改密码

使用内置的set_password()方法。

>>> from django.contrib.auth.models import User
>>> u = User.objects.get(username='john')
>>> u.set_password('new password')
>>> u.save()

验证用户

authenticate()

验证给出的username和password是否是一个有效用户。如果有效,则返回一个User对象,无效则返回None。

from django.contrib.auth import authenticate
user = authenticate(username='john', password='secret')
if user is not None:
  # the password verified for the user
  if user.is_active:
    print("User is valid, active and authenticated")
  else:
    print("The password is valid, but the account has been disabled!")
else:
  # the authentication system was unable to verify the username and password
  print("The username and password were incorrect.")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Pyinstaller 打包发布经验总结

    Pyinstaller 打包发布经验总结

    这篇文章主要介绍了Pyinstaller 打包发布经验总结,使用Pyinstaller打包Python项目包含了大量的坑,感兴趣的可以一起来了解一下
    2020-06-06
  • python list格式数据excel导出方法

    python list格式数据excel导出方法

    今天小编就为大家分享一篇python list格式数据excel导出方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • python开发一款翻译工具

    python开发一款翻译工具

    这篇文章主要介绍了如何用python开发一款翻译工具,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-10-10
  • Python万字深入内存管理讲解

    Python万字深入内存管理讲解

    内存管理是指在程序的运行过程中,分配内容和回收内存的过程。如果只分配,不回收,电脑上那点内存很快就被用光。幸运的是,Python和Java等高级语言会自动管理内存的分配和回收
    2022-07-07
  • python实现猜数游戏(保存游戏记录)

    python实现猜数游戏(保存游戏记录)

    这篇文章主要为大家详细介绍了python实现猜数游戏,保存游戏记录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Numpy中np.dot与np.matmul的区别详解

    Numpy中np.dot与np.matmul的区别详解

    本文主要介绍了Numpy中np.dot与np.matmul的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Pytorch GPU内存占用很高,但是利用率很低如何解决

    Pytorch GPU内存占用很高,但是利用率很低如何解决

    这篇文章主要介绍了Pytorch GPU内存占用很高,但是利用率很低的原因及解决方法,具有很好的参考价值,希望对大家 有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题

    解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题

    很多朋友向小编求助pycharm安装scrapy DLL load failed:找不到指定的程序的问题,就这一问题小编在window10 + anaconda3 +pycharm2020.1.1 + scrapy安装亲测可用,下面把我的处理过程分享到脚本之家平台,供大家参考
    2021-06-06
  • python函数的万能参数传参详解

    python函数的万能参数传参详解

    这篇文章主要介绍了python函数的万能参数传参详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 解决Python正则表达式匹配反斜杠''''\''''问题

    解决Python正则表达式匹配反斜杠''''\''''问题

    这篇文章主要介绍了Python正则表达式匹配反斜杠'\'问题 ,很多朋友在使用python 正则式的过程中,经常被这个问题困扰,今天小编通过代码给大家详细介绍,需要的朋友可以参考下
    2019-07-07

最新评论