一、简介
Django 身份验证同时提供身份验证和授权,通常称为身份验证系统
二、user对象
User
对象是认证系统的核心。代表与站点交互的人,并用于启用诸如限制访问、注册用户配置文件、将内容与创建者关联等。在 Django 的身份验证框架中只存在一类用户,即'superusers'
管理员'staff'
用户只是具有特殊属性集,而不是不同类别的用户对象。
1、默认用户的主要属性及其他字段
_
@
+
.
-
blank=True
blank=True
blank=True
Group
Permission
2、方法
get_username()
返回用户的用户名。
get_full_name()
返回first_name加号last_name,中间有一个空格。
get_short_name()
返回first_name.
set_password( raw_password )
将用户的密码设置为给定的原始字符串,注意密码散列。不保存 User对象。当raw_passwordisNone时,密码将被设置为无法使用的密码,就像 set_unusable_password() 使用过一样。
check_password( raw_password )
返回True给定的原始字符串是否是用户的正确密码。
set_unusable_password()
将用户标记为未设置密码。这与密码的空白字符串不同。 check_password()因为这个用户永远不会回来True。不保存 User对象。
has_usable_password()
False如果 set_unusable_password()已为此用户调用,则返回。
get_user_permissions( obj =无)
返回用户直接拥有的一组权限字符串。如果obj传入,则只返回此特定对象的用户权限。
get_group_permissions( obj =无)
返回用户通过他们的组拥有的一组权限字符串。如果obj传入,则只返回此特定对象的组权限。
get_all_permissions( obj =无)
通过组和用户权限返回用户拥有的一组权限字符串。如果obj传入,则仅返回此特定对象的权限。
has_perm(perm, obj =无)
返回True用户是否具有指定的权限,其中 perm 的格式为,如果用户处于非活动状态,此方法将始终返回。对于活动的超级用户,此方法将始终返回."<app label>.<permission codename>"FalseTrue,如果obj传入,则此方法不会检查模型的权限,而是检查此特定对象的权限。
has_perms( perm_list , obj = None )
返回True用户是否具有每个指定的权限,其中每个权限的格式为 。如果用户处于非活动状态,此方法将始终返回。对于活动的超级用户,此方法将始终返回."<app label>.<permission codename>"FalseTrue,如果obj传入,则此方法不会检查模型的权限,而是检查特定对象的权限。
has_module_perms(包名)
True如果用户在给定包(Django 应用标签)中具有任何权限,则返回。如果用户处于非活动状态,此方法将始终返回False。对于活动的超级用户,此方法将始终返回True.
email_user(主题,消息,from_email = None,** kwargs)
向用户发送电子邮件。如果from_email是None,Django 使用DEFAULT_FROM_EMAIL. 任何**kwargs都传递给基础send_mail()调用。
3、创建用户
#创建用户最直接的方法是使用包含的 create_user()辅助函数:
from django.contrib.auth.models import User
user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
user.last_name = 'Lennon'
user.save()
4、创建超级用户
python manage.py createsuperuser --username=joe --email=joe@example.com
5、修改密码
Django 不在用户模型上存储原始(明文)密码,而仅存储哈希
from django.contrib.auth.models import User
u = User.objects.get(username='john')
u.set_password('new password')
u.save()
#如果您安装了 Django 管理员,可以在身份验证系统的管理页面上更改用户密码。#Django 还提供了视图和表单,可用于允许用户更改自己的密码。
6、验证用户
用于authenticate()
验证一组凭据。它将凭据作为关键字参数,username
对于 password
默认情况,针对每个 身份验证后端User
检查它们,如果凭据对后端有效,则返回一个 对象。如果凭据对任何后端都无效,或者后端引发PermissionDenied
,则返回None
from django.contrib.auth import authenticate
user = authenticate(username='john', password='secret')
if user is not None:
# A backend authenticated the credentials
else:
# No backend authenticated the credentials
7、权限和授权
Django 带有一个内置的权限系统。它提供了一种将权限分配给特定用户和用户组的方法。
它由 Django 管理站点使用,也可以在自己的代码中使用它。
Django 管理站点使用权限如下
查看对象的访问权限仅限于对该类型对象具有“查看”或“更改”权限的用户。
查看“添加”表单和添加对象的访问权限仅限于对该类型对象具有“添加”权限的用户。
查看更改列表、查看“更改”表单和更改对象的访问权限仅限于对该类型对象具有“更改”权限的用户。
删除对象的权限仅限于对该类型对象具有“删除”权限的用户。
不仅可以按对象类型设置权限,还可以按特定对象实例设置权限。通过使用 类提供的has_view_permission()
、 和 方法has_add_permission()
, 可以为相同类型的不同对象实例自定义权限。has_change_permission()
has_delete_permission()
ModelAdmin
User
对象有两个多对多字段:groups
和user_permissions
. 对象可以像任何其他Django 模型User
一样访问它们的相关对象:
myuser.groups.set([group_list])
myuser.groups.add(group, group, ...)
myuser.groups.remove(group, group, ...)
myuser.groups.clear()
myuser.user_permissions.set([permission_list])
myuser.user_permissions.add(permission, permission, ...)
myuser.user_permissions.remove(permission, permission, ...)
myuser.user_permissions.clear()
8、登录
如果您有想要附加到当前会话的经过身份验证的用户 - 这是通过login()
函数完成的。
它需要一个HttpRequest
对象和一个 User
对象。 login()
使用 Django 的会话框架将用户的 ID 保存在会话中。
请注意,匿名会话期间的任何数据集都会在用户登录后保留在会话中。
from django.contrib.auth import authenticate, login
def my_view(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
# Redirect to a success page.
...
else:
# Return an 'invalid login' error message.
...
9、注销用户
要注销已通过 登录的用户, 视图中django.contrib.auth.login()
使用 。django.contrib.auth.logout()
它接受一个 HttpRequest
对象并且没有返回值。例子:
from django.contrib.auth import logout
def logout_view(request):
logout(request)
# Redirect to a success page.
.