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 相关文章推荐
30分钟搭建Python的Flask框架并在上面编写第一个应用
Mar 30 Python
python MysqlDb模块安装及其使用详解
Feb 23 Python
分享vim python缩进等一些配置
Jul 02 Python
Python基于opencv实现的简单画板功能示例
Mar 04 Python
python使用Pandas库提升项目的运行速度过程详解
Jul 12 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
TensorFLow 变量命名空间实例
Feb 11 Python
django model的update时auto_now不被更新的原因及解决方式
Apr 01 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 Python
Python 的 f-string 可以连接字符串与数字的原因解析
Feb 20 Python
Autopep8的使用(python自动编排工具)
Mar 02 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发送邮件类代码附详细说明
2008/07/10 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
2013/01/29 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
2013/06/23 PHP
php阿拉伯数字转中文人民币大写
2015/12/21 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
统计jQuery中各字符串出现次数的工具
2012/05/03 Javascript
JavaScript清空数组元素的两种方法简单比较
2015/07/10 Javascript
jQuery菜单插件用法实例
2015/07/25 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
轮播的简单实现方法
2016/07/28 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
详解js中==与===的区别
2017/01/08 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
移动端(微信等使用vConsole调试console的方法
2019/03/05 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
Vue3 响应式侦听与计算的实现
2020/11/11 Javascript
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
Python中zip()函数用法实例教程
2014/07/31 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
python实现机器学习之多元线性回归
2018/09/06 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
python线程里哪种模块比较适合
2020/08/02 Python
最新Python idle下载、安装与使用教程图文详解
2020/11/28 Python
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
介绍一下代理模式(Proxy)
2014/10/17 面试题
商务助理求职信范文
2014/04/20 职场文书
环卫工人慰问信
2015/02/15 职场文书
办公室禁烟通知
2015/04/23 职场文书