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定时采集摄像头图像上传ftp服务器功能实现
Dec 23 Python
python读取word文档的方法
May 09 Python
Python标准库之Sys模块使用详解
May 23 Python
微信跳一跳自动运行python脚本
Jan 08 Python
Linux下python制作名片示例
Jul 20 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
python实现矩阵和array数组之间的转换
Nov 29 Python
Python如何用filter函数筛选数据
Mar 05 Python
基于Python的OCR实现示例
Apr 03 Python
实例讲解Python 迭代器与生成器
Jul 08 Python
Python如何截图保存的三种方法(小结)
Sep 01 Python
Python Pandas读取Excel日期数据的异常处理方法
Feb 28 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
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
php去掉文件前几行的方法
2015/07/29 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
PHP ADODB生成下拉列表框功能示例
2018/05/29 PHP
PDO::errorCode讲解
2019/01/28 PHP
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
vue2.0 自定义 饼状图 (Echarts)组件的方法
2018/03/02 Javascript
快速处理vue渲染前的显示问题
2018/03/05 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
使用Python快速制作可视化报表的方法
2019/02/03 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
html5弹跳球示例代码
2013/07/23 HTML / CSS
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
英国优质家居用品网上品牌:URBANARA
2018/06/01 全球购物
外语系毕业生找工作的求职信
2013/11/28 职场文书
新文化运动的口号
2014/06/21 职场文书
工会工作先进事迹
2014/08/18 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
中学语文教学反思
2016/02/16 职场文书
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android