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传递中文参数的问题
Aug 04 Python
Python实现ssh批量登录并执行命令
Oct 25 Python
python flask 多对多表查询功能
Jun 25 Python
Python实现的三层BP神经网络算法示例
Feb 07 Python
Python+Django搭建自己的blog网站
Mar 13 Python
python 判断参数为Nonetype类型或空的实例
Oct 30 Python
Python3实现腾讯云OCR识别
Nov 27 Python
浅谈python 中类属性共享的问题
Jul 02 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
Oct 11 Python
TFRecord文件查看包含的所有Features代码
Feb 17 Python
pandas分批读取大数据集教程
Jun 06 Python
学点简单的Django之第一个Django程序的实现
Feb 24 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优于Node.js的五大理由分享
2012/09/15 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
PHP中仿制 ecshop验证码实例
2017/01/06 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
javascript+mapbar实现地图定位
2010/04/09 Javascript
Node.js重新刷新session过期时间的方法
2016/02/04 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
jQuery实现的简单拖拽功能示例
2016/09/13 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
jquery仿京东商品放大浏览页面
2017/06/06 jQuery
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
vue任意关系组件通信与跨组件监听状态vue-communication
2020/10/18 Javascript
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现文件按照日期命名的方法
2015/07/09 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
python语音识别实践之百度语音API
2018/08/30 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
what is the difference between ext2 and ext3
2013/11/03 面试题
人事专员岗位职责
2013/11/20 职场文书
火灾现场处置方案
2014/05/28 职场文书
房屋出租委托书格式
2014/09/23 职场文书
文明单位汇报材料
2014/12/24 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
golang生成并解析JSON
2022/04/14 Golang