博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django用户认证系统(一)User对象
阅读量:4707 次
发布时间:2019-06-10

本文共 3670 字,大约阅读时间需要 12 分钟。

原文:https://www.cnblogs.com/linxiyue/p/4060213.html

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

1
2
3
4
5
6
7
8
9
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时,用户获得全部权限。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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对象,默认为当时的时间。

1
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()方法。

1
2
3
4
5
6
7
8
>>> 
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

1
$ python manage.py createsuperuser 
-
-
username
=
joe 
-
-
email
=
joe@example.com

修改密码

使用内置的set_password()方法。

1
2
3
4
>>> 
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。

1
2
3
4
5
6
7
8
9
10
11
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."
)

  

转载于:https://www.cnblogs.com/chdltanke/p/10365204.html

你可能感兴趣的文章
函数式语言
查看>>
SQL Server系统视图sys.master_files不能正确显示数据库脱机状态
查看>>
oracle如何判断字段是数字还是字符
查看>>
eclipse启动失败,加载到loading workbench时,停止或者闪退的解决办法
查看>>
Eclipse如何解决启动慢?
查看>>
微信小程序 图片路径自动加上文件目录导致渲染报错问题
查看>>
win10下MySql问题navicat显示Navicat 2003-can't connect to MYSQL server on 'localhost'(10061)
查看>>
android获取APP 包名和activity
查看>>
列表【二】
查看>>
PHP算法每日一练 -- 单链表
查看>>
MemberCached 学习上【转】
查看>>
deb包的安装方法
查看>>
程序员如何在技术更新中不被淘汰?知乎网友评论后恍然大悟
查看>>
Ajax异步加载数据及Redis缓存
查看>>
基于url拦截实现权限控制
查看>>
PXE自动化安装centos6和centos7
查看>>
一个iframe注入漏洞,也是微软的 Application["error"] 漏洞
查看>>
乔布斯的魔力演讲
查看>>
JavaScript的Event Loop(浏览器)
查看>>
Customized version of Stack C++
查看>>