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中列表、字典、元组、集合数据结构整理
Nov 20 Python
Python中实现结构相似的函数调用方法
Mar 10 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
Jul 25 Python
python消费kafka数据批量插入到es的方法
Dec 27 Python
Python发展简史 Python来历
May 14 Python
pyqt5 实现多窗口跳转的方法
Jun 19 Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
Apr 21 Python
Python轻量级web框架bottle使用方法解析
Jun 13 Python
python 识别登录验证码图片功能的实现代码(完整代码)
Jul 03 Python
Python如何把字典写入到CSV文件的方法示例
Aug 23 Python
python使用matplotlib绘制图片时x轴的刻度处理
Aug 30 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+javascript实现二级级联菜单的制作
2008/05/06 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
2016/04/30 PHP
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
从零学习node.js之模块规范(一)
2017/02/21 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
使用 NodeJS+Express 开发服务端的简单介绍
2017/04/07 NodeJs
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
2019/03/22 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
python的多重继承的理解
2017/08/06 Python
python实现redis三种cas事务操作
2017/12/19 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
python-图片流传输的思路及示例(url转换二维码)
2020/12/21 Python
英国创新设计文具、卡片和礼品包装网站:Paperchase
2018/07/14 全球购物
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
跟单文员的岗位职责
2013/11/14 职场文书
小学教育毕业生自荐信
2013/11/18 职场文书
个人欠款担保书
2014/05/20 职场文书
绿色环保口号
2014/06/12 职场文书
中国梦口号
2014/06/13 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
幽默口才训练经典句子(48句)
2019/08/19 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python