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实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
python实现自动登录人人网并访问最近来访者实例
Sep 26 Python
Python基于回溯法解决01背包问题实例
Dec 06 Python
python实现决策树ID3算法的示例代码
May 30 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
Aug 03 Python
python读取目录下最新的文件夹方法
Dec 24 Python
python配置grpc环境
Jan 01 Python
flask框架渲染Jinja模板与传入模板变量操作详解
Jan 25 Python
使用Python和百度语音识别生成视频字幕的实现
Apr 09 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
May 18 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 Python
Python一行代码实现自动发邮件功能
May 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
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
2019/04/22 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
基于Python的关键字监控及告警
2017/07/06 Python
python中reader的next用法
2018/07/24 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
python speech模块的使用方法
2020/09/09 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
Farfetch香港官网:汇集全球时尚奢侈品购物平台
2017/11/26 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
俄罗斯厨房产品购物网站:COOK HOUSE
2021/03/15 全球购物
护理专业毕业生推荐信
2013/10/31 职场文书
超市5.1促销活动
2014/01/15 职场文书
总会计师岗位职责
2014/02/19 职场文书
高考备战决心书
2014/03/11 职场文书
商务日语专业的自荐信
2014/05/23 职场文书
2015年安全教育月活动总结
2015/03/26 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书
新手入门Mysql--sql执行过程
2021/06/20 MySQL
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL