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入门篇之数字
Oct 20 Python
20个常用Python运维库和模块
Feb 12 Python
matlab中实现矩阵删除一行或一列的方法
Apr 04 Python
Mac下Anaconda的安装和使用教程
Nov 29 Python
Python多线程同步---文件读写控制方法
Feb 12 Python
python使用百度文字识别功能方法详解
Jul 23 Python
python 爬取学信网登录页面的例子
Aug 13 Python
python实现七段数码管和倒计时效果
Nov 23 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
Mar 06 Python
pytorch随机采样操作SubsetRandomSampler()
Jul 07 Python
Python带你从浅入深探究Tuple(基础篇)
May 15 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 db类库进行数据库操作
2009/03/19 PHP
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
深入php socket的讲解与实例分析
2013/06/13 PHP
Php header()函数语法及使用代码
2013/11/04 PHP
php字符串函数学习之strstr()
2015/03/27 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
2016/12/06 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
IE中createElement需要注意的一个问题
2010/07/13 Javascript
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
ng2学习笔记之bootstrap中的component使用教程
2017/03/09 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
AngularJS中下拉框的高级用法示例
2017/10/11 Javascript
vue的一个分页组件的示例代码
2017/12/25 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
python实现机器人行走效果
2018/01/29 Python
Python实现多进程的四种方式
2019/02/22 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
《争吵》教学反思
2014/02/15 职场文书
初中英语演讲稿
2014/04/29 职场文书
2016年万圣节活动个人总结
2016/04/05 职场文书
mysql 带多个条件的查询方式
2021/06/05 MySQL
Python pandas读取CSV文件的注意事项(适合新手)
2021/06/20 Python
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js