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中的装饰器用法详解
Jan 14 Python
从Python程序中访问Java类的简单示例
Apr 20 Python
python简单获取本机计算机名和IP地址的方法
Jun 03 Python
python if not in 多条件判断代码
Sep 21 Python
django基础之数据库操作方法(详解)
May 24 Python
深入分析python中整型不会溢出问题
Jun 18 Python
python+selenium实现简历自动刷新的示例代码
May 20 Python
python序列化与数据持久化实例详解
Dec 20 Python
Python运行DLL文件的方法
Jan 17 Python
python利用datetime模块计算程序运行时间问题
Feb 20 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
Mar 26 Python
pycharm部署django项目到云服务器的详细流程
Jun 29 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系统流量分析的程序
2006/10/09 PHP
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
Nodejs抓取html页面内容(推荐)
2016/08/11 NodeJs
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
bootstrap table配置参数例子
2017/01/05 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
JavaScript 异步时序问题
2020/11/20 Javascript
Python 实现简单的电话本功能
2015/08/09 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
实例讲解python中的协程
2018/10/08 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
python SocketServer源码深入解读
2019/09/17 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
numba提升python运行速度的实例方法
2021/01/25 Python
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
德国拖鞋网站:German Slippers
2019/11/08 全球购物
周年庆典邀请函范文
2014/01/23 职场文书
安全生产投入制度
2014/01/29 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
数控技校生自我鉴定
2014/04/19 职场文书
产品调价通知函
2015/04/20 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python
阿里云服务器Ubuntu 20.04上安装Odoo 15
2022/05/20 Servers