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爬虫之使用urllib2组件抓取网页内容
Nov 04 Python
Python中的浮点数原理与运算分析
Oct 12 Python
Ubuntu安装Jupyter Notebook教程
Oct 18 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
Feb 03 Python
TensorFlow Session会话控制&amp;Variable变量详解
Jul 30 Python
Django实现文件上传和下载功能
Oct 06 Python
Python常用模块sys,os,time,random功能与用法实例分析
Jan 07 Python
TFRecord文件查看包含的所有Features代码
Feb 17 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
Apr 13 Python
Python中的面向接口编程示例详解
Jan 17 Python
Python&Matlab实现樱花的绘制
Apr 07 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基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
php实现微信支付之企业付款
2018/05/30 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
vue-hook-form使用详解
2017/04/07 Javascript
jQuery操作之效果详解
2017/05/19 jQuery
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
Python爬取三国演义的实现方法
2016/09/12 Python
python爬虫之BeautifulSoup 使用select方法详解
2017/10/23 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
Python字符串对象实现原理详解
2019/07/01 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
python定义类的简单用法
2020/07/24 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
EVE LOM英国官网:全世界最好的洁面膏
2017/10/30 全球购物
电子商务专员岗位职责
2013/12/11 职场文书
五一服装活动方案
2014/01/11 职场文书
集体婚礼策划方案
2014/02/22 职场文书
社会实践活动总结范文
2014/07/03 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
推普周活动总结
2014/08/28 职场文书
法人代表授权委托书范文
2014/09/10 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
nginx之queue的具体使用
2022/06/28 Servers