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编程之属性和方法实例详解
May 19 Python
python处理Excel xlrd的简单使用
Sep 12 Python
python使用Tesseract库识别验证
Mar 21 Python
Python基于jieba库进行简单分词及词云功能实现方法
Jun 16 Python
在pytorch中为Module和Tensor指定GPU的例子
Aug 19 Python
手写一个python迭代器过程详解
Aug 27 Python
flask框架配置mysql数据库操作详解
Nov 29 Python
python十进制转二进制的详解
Feb 07 Python
Python基于wordcloud及jieba实现中国地图词云图
Jun 09 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
Aug 27 Python
Opencv+Python识别PCB板图片的步骤
Jan 07 Python
详解分布式系统中如何用python实现Paxos
May 18 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
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
PHP 函数执行效率的小比较
2010/10/17 PHP
php注销代码(session注销)
2012/05/31 PHP
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
解析isset与is_null的区别
2013/08/09 PHP
php画图实例
2014/11/05 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
PHP实现的获取文件mimes类型工具类示例
2018/04/08 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
python笔记(2)
2012/10/24 Python
Python写的创建文件夹自定义函数mkdir()
2014/08/25 Python
使用Python中的cookielib模拟登录网站
2015/04/09 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
悬挂训练绳:TRX
2017/12/14 全球购物
环境科学专业研究生求职信
2013/10/02 职场文书
设计总监岗位职责
2013/12/07 职场文书
服装创业计划书范文
2014/02/05 职场文书
旅游节目策划方案
2014/05/26 职场文书
中文专业求职信
2014/06/20 职场文书
会计学专业求职信
2014/07/17 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python
vue实现Toast组件轻提示
2022/04/10 Vue.js
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers