转载:django用户验证相关

Django里面的User、login、logout、authenticate模块讲解

 

1、User模块相关知识

user模型各个字段的说明

属性

描述

Id

int类型,数据表主键

Password

varchar类型,代表用户密码,在默认情况下使用pbkdf2_sha256方式来存储和管理用户的密码

username

必填; 少于等于30字符. 只允许字符,数字,下划线

first_name

可选; 少于等于30字符,代表用户的名字

last_name

可选; 少于等于30字符,代表用户的姓氏

email

可选. 邮件地址.

password

必填. 密码的摘要hash(Django不会存储原始密码),详见密码章节部分

is_staff

布尔值. 用户是否拥有网站的管理权限.

is_active

布尔值. 是否允许用户登录, 设置为False,可以不用删除用户来禁止 用户登录

is_superuser

布尔值. 用户是否拥有所有权限,而无需任何显式的权限分配定义

last_login

用户最后登录的时间,缺省会设置为当前时间

date_joined

创建用户的时间,当用户创建时,缺省的设置为当前的时间

 

user方法

方法

描述

is_authenticated()

如果是真正的 User 对象,返回值恒为 True 。 用于检查用户是否已经通过了认证。通过认证并不意味着 用户拥有任何权限,甚至也不检查该用户是否处于激活状 态,这只是表明用户成功的通过了认证。

is_anonymous()

如果是个 AnonymousUser ,返回值为 True , 如果是 User 对象,返回值为 False 。一般来 说, is_authenticated() 会比这个方法更常用些。

get_full_name()

返回值为: first_name 加上 last_name ,以 空格分隔。

set_password(passwd)

将用户的密码设置为给定的字符串,实际密码已被哈希 处理。这时并不会真正保存 User 对象。

check_password(passwd)

如果给定的字符串通过了密码检查,返回 True 。 密码比较已进行了哈希处理。

get_group_permissions()

返回用户通过所属组获得的权限列表

get_all_permissions()

返回用户通过所属组和用户自身权限所获得的所有权限 列表。

has_perm(perm)

如果用户拥有给定的权限,返回 True , perm 应形如 "package.codename" 的格式。如果用户处于 非激活状态,则总是返回 False 。

has_perms(perm_list)

如果用户拥有所有给定的权限,返回 True 。 如果用户处于非激活状态,则总是返回 False 。

has_module_perms(app_label)

如果用户拥有任何给定 app_label 的权限,返回 True 。如果用户处于非激活状态,则总是返回 False

get_and_delete_messages()

返回用户的 Message 对象列表,并从队列中删除。

email_user(subj, msg)

给用户发送电子邮件,用 DEFAULT_FROM_EMAIL 的设 置作为发件人。也可以用第3个参数 from_email 来 覆盖设置。

get_profile()

返回用户的网站自定义profile,详见Profile章节

 

2、authenticate模块

认证给出的用户名和密码,使用authenticate()函数。它接受两个参数,用户名username和密码password,并在密码对给出的用户名合法的情况下返回一个User对象。如密码不合法,authenticate()返回None。

1
2
3
4
5
6
>>> from django.contrib import auth
>>> user = auth.authenticate(username='john', password='secret')
>>> if user is not None:
...   print "Correct!"
... else:
...   print "Invalid password."

  

 

3、登录和验证

authenticate()只是验证一个用户的证书而已。而要登录一个用户,使用login()。该函数接受一个HTTPRequest对象和一个User对象作为参数并使用Django的会话(session)框架把用户的ID保存在该会话中。

 

下面例子演示如何在一个视图中同时使用authenticate()和login()函数

1
2
3
4
5
6
7
8
9
10
11
from django.contrib import auth
 
def loginView(request):
    username = request.POST.get('username', '')
    password = request.POST.get('password', '')
    user = auth. authenticate(username=username, password=password)
    if user is not None and user.is_active:
        auth.login(request, user)
        return HttpResponseRedirect('/account/loggin')
    else:
        return HttpResponseRedirect('/account/invalid')

  

在这里,有个有意思的是:user.is_active,用来判断用户名密码是否有效性

 

4、注销用户

注销一个用户,在你的视图中使用logout()。它接受一个HTTPRequest对象并且没有返回值,因为没有返回值,徐媛媛返回一个页面。

1
2
3
4
5
from django.contrib import auth
 
def logoutView(request):
    auth.logout(request)
    return HttpResponseRedirect('/account/logou')

  

需要注意的是:

即使用没有登录,logout()也不会抛出异常

posted @ 2020-07-30 01:12  大牛等等我  阅读(140)  评论(0编辑  收藏  举报