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"