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中的条件判断语句与循环语句用法小结
Mar 21 Python
Python图像处理之识别图像中的文字(实例讲解)
May 10 Python
python如何生成网页验证码
Jul 28 Python
Python json模块dumps、loads操作示例
Sep 06 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
python GUI图形化编程wxpython的使用
Jul 19 Python
Java文件与类动手动脑实例详解
Nov 10 Python
超全Python图像处理讲解(多模块实现)
Apr 13 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
浅析python 动态库m.so.1.0错误问题
May 09 Python
深入了解python列表(LIST)
Jun 08 Python
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
Oct 16 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用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
php while循环得到循环次数
2013/10/26 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
实例详解jQuery表单验证插件validate
2016/01/18 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
关于js二维数组和多维数组的定义声明(详解)
2016/10/02 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
2017/06/12 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
vue 解决循环引用组件报错的问题
2018/09/06 Javascript
浅析微信扫码登录原理(小结)
2018/10/29 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
python去除所有html标签的方法
2015/05/05 Python
基于python实现从尾到头打印链表
2019/11/02 Python
哪些是python中web开发框架
2020/06/17 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
python 简单的调用有道翻译
2020/11/25 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
Myprotein蛋白粉美国官网:欧洲畅销运动营养品牌
2016/11/15 全球购物
澳洲小众品牌的集合网站:BNKR
2018/02/23 全球购物
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
天鹅的故事教学反思
2014/02/04 职场文书
2014年乡镇植树节活动方案
2014/02/28 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
工作时间调整通知
2015/04/24 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
亮剑观后感300字
2015/06/05 职场文书
签字仪式主持词
2015/07/03 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python