django 自带的验证功能

django.contrib.auth提供了很多验证方法

 

authenticate():

提供了用户认证,在自带的数据库表中验证用户名和密码,需要username和password两个关键字参数

如果认证成功后,会返回一个User对象。authenticate()会在User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。

当我们试图登陆一个从数据库中直接取出来不经过authenticate()的User对象时会报错!!!

也就是数据库表中有一个属性代表登录验证过了

 

登录验证

auth.login(HttpRequest,user)

该函数接受一个Httprequest对象,以及一个认证了的User对象,

这个函数使用django的session框架给某个已认证的用户附加上sessionid等信息

 

注销用户

logout(request)

 

登录验证装饰器:

@login_required

from django.contrib.auth.decorators import login_required

如果用户没有登录,会跳转到django默认的登陆路径:/accounts/login/

所以我们要在settings里面修改配置项,把默认值换到我们的登陆

# 设置 我这个网站 默认的登录页面是什么

LOGIN_URL = "/login/"

 

User对象:

User 对象属性:username, password(必填项)password用哈希算法保存到数据库

is_staff : 用户是否拥有网站的管理权限.

is_active : 是否允许用户登录, 设置为``False``,可以不用删除用户来禁止 用户登录

 

is_authenticated():

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

这个方法很重要, 在后台用request.user.is_authenticated()判断用户是否已经登录,如果true则可以向前台展示request.user.name

 

创建普通用户:

from django.contrib.auth.models import User

user=User.objects.create_user(username='',,password='')

 

检查密码,如果密码正确,返回True:

check_password(password)

用户需要修改密码的时候,首先要让其输入原来的密码 ,如果给定的值通过了密码检查,返回 True

 

重置密码:

set_password()

user=User.objects.get(username='')

user.set_password('password')

user.save()

 

进阶:

如果想给用户添加新的字段,比如手机号,django肯定也考虑到了

我们可以通过继承内置的auth_user表的对应的类,来自己定义一个自己的ORM类。

导入定义的父类:

from django.contrib.auth.models improt AbstractUser

class UserInfo(AbstractUser):

  phone=models.CharField(max_lebgth=11)

  def __str__(self.username)

    return self.username

这样就可以把手机号添加到user的类里面了,但要注意的是要设置

Settings里面告诉django,我要用新定义的Userinfo表来做用户验证:

AUTH_USER_MODEL="app名.UserInfo"

 

posted @ 2018-06-29 19:03  赵伟航  阅读(370)  评论(0编辑  收藏  举报