天天看点

Django 用户认证组件

组件功能,用session记录登陆验证状态,模块都封装在auth模块里

导包: from django.contrib import auth

这个组件也能让会话跟踪更严谨,

a用户登录后再用同一个客户端登录b用户,session在数据库的记录会被新建且覆盖之前的session,从始至终只有1条数据库记录 而a用户登完,再用a用户账号密码登陆,原始的session在数据库的记录不会发生变化.

前提: 数据库为auth-user表,创建超级用户 python manage.py createsuperuser

1.1 authenticate(username=,password=),进行用户名和密码认证

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

​ 如果验证成功,返回user对象,失败返回none

Django 用户认证组件

1.2 login(request,user) 参数2是前一个authenticate认证成功返回的user对象,这个对象会赋值给request.user

也就是request.user =user, 这里request.user如果认证成功则是登陆的用户对象,如果未认证,则是一个匿名用户对象,匿名用户只有username字段可以输出调用

匿名用户还有下面其他几个属性可以用

id 永远为none

username 永远为空字符串

get_username() 永远返回空字符串

is_staff和is_superuser 永远为false

is_active 永远为false

groups 和user_permission 永远为空

is_annoymous() 返回true

is_authenticated 返回false

set_password(),check_password(),save()和delete()会引发notimplementerror

1.3 logout()

auth.logout(request)

该函数接受一个httprequest对象,无返回值。当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。

导包 ​<code>​from django.contrib.auth.models import user​</code>​

user对应的就是数据库的auth_user表

2.1 user对象的 is_authenticated

方法1:

方法2:

django已经为我们设计好了一个用于此种情况的装饰器:login_requierd()

在setting.py要设置login_url,设置登陆页面,一旦装饰器认证失败返回这个登陆页面

2.2 创建用户

使用 create_user 辅助函数创建用户:

自己直接调用user.objects.create,也可以只不过这样存储的账号密码是明文,而django自带的创建的是密文

2.3 check_password(passwd)

用户修改密码的时候,让他先输入原来的密码,如果输入正确返回true

2.4修改密码

使用set_password()来修改密码