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


Posted in Python onAugust 02, 2019

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.")

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

Python 相关文章推荐
python数据结构之图深度优先和广度优先实例详解
Jul 08 Python
菜鸟使用python实现正则检测密码合法性
Jan 05 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 Python
你应该知道的python列表去重方法
Jan 17 Python
django 使用 request 获取浏览器发送的参数示例代码
Jun 11 Python
Pytorch Tensor的索引与切片例子
Aug 18 Python
IronPython连接MySQL的方法步骤
Dec 27 Python
如何使用python实现模拟鼠标点击
Jan 06 Python
tensorflow 获取checkpoint中的变量列表实例
Feb 11 Python
Python修改DBF文件指定列
Dec 19 Python
selenium+超级鹰实现模拟登录12306
Jan 24 Python
python上下文管理的使用场景实例讲解
Mar 03 Python
浅谈python3中input输入的使用
Aug 02 #Python
Pycharm连接远程服务器并实现远程调试的实现
Aug 02 #Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 #Python
Django单元测试工具test client使用详解
Aug 02 #Python
Django使用unittest模块进行单元测试过程解析
Aug 02 #Python
pip安装python库的方法总结
Aug 02 #Python
python twilio模块实现发送手机短信功能
Aug 02 #Python
You might like
深入php 正则表达式的学习探讨
2013/06/06 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
关于jQuery UI 使用心得及技巧
2012/10/10 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
利用javascript实现web页面中指定区域打印
2013/10/30 Javascript
js charAt的使用示例
2014/02/18 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
2016/06/17 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
jQuery图片缩放插件smartZoom使用实例详解
2017/08/25 jQuery
微信小程序异步处理详解
2017/11/10 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
vant实现购物车功能
2020/06/29 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
Centos5.x下升级python到python2.7版本教程
2015/02/14 Python
python 二维数组90度旋转的方法
2019/01/28 Python
python中图像通道分离与合并实例
2020/01/17 Python
python 串行执行和并行执行实例
2020/04/30 Python
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
英文版区域经理求职信
2013/10/23 职场文书
机电工程学生自荐信范文
2013/12/07 职场文书
遥感技术与仪器求职信
2014/02/22 职场文书
留学经费担保书
2014/05/12 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
家长评语怎么写
2014/12/30 职场文书