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生成器实现微线程编程的教程
Apr 13 Python
分析Python中设计模式之Decorator装饰器模式的要点
Mar 02 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
python3之微信文章爬虫实例讲解
Jul 12 Python
详解K-means算法在Python中的实现
Dec 05 Python
python利用微信公众号实现报警功能
Jun 10 Python
如何不用安装python就能在.NET里调用Python库
Jul 12 Python
python输出决策树图形的例子
Aug 09 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
May 25 Python
Python QTimer实现多线程及QSS应用过程解析
Jul 11 Python
python raise的基本使用
Sep 10 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
Jun 23 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数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
jquery ajax post提交数据乱码
2013/11/05 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
python实现八大排序算法(2)
2017/09/14 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
python:print格式化输出到文件的实例
2018/05/14 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
python实现的自动发送消息功能详解
2019/08/15 Python
flask的orm框架SQLAlchemy查询实现解析
2019/12/12 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
院领导写的就业推荐信
2014/03/09 职场文书
运动会演讲稿300字
2014/08/25 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
政风行风建设整改方案
2014/10/27 职场文书
中秋节慰问信
2015/02/15 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
小学三年级作文之写景
2019/11/05 职场文书
pytorch 实现变分自动编码器的操作
2021/05/24 Python
Java中的随机数Random
2022/03/17 Java/Android