day76 auth模块 用户验证,

概要:

我们的登录验证是浏览器级别的验证还有用户级别的验证,

使用我们的django内部的数据库表,auth_user,然后使用它内部的一些模块和方法

在视图函数里面需要引入模块写逻辑代码:

authenticate()

提供用户认证,即验证用户名以及密码是否正确,一般需要表中的username,password连个关键字参数.

如果认证信息有效,会返回一个user对象,authenticate()会在user对象上设置一个属性,表示那种认证后端认证了该用户,且该信息在后面的登录过程中是需要的,当我们试图登录一个从数据库中取出来不经过authenticate()的user对象会报错!

在验证中我们有几种状态固定语句:

登录:login

user1=auth.authenticate(username=user,password=pwd)

auth.login(request,user1)  # 类似于session写操作

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

==============================================================

退出登录状态:logout

auth.logout(request)

request.session.flush()

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

=================================================

验证  :User对象的is_authenticated()方法

user.is_authenticated()

登录状态时,返回True,否则返回False

1,当用户登录时才可以访问某些页面,(有点类似于我们的cookie和session设置的状态)

2,如果没有登录,系统会检测到,然后强行让用户去登录,会自动就把页面跳转到登录页面去

3,用户在跳转的登录界面中完成了登录后,自动访问到跳转登录之前所访问的地址

方法一:

def login(request):

  if not request.user.is_authenticated():

    return redirect('%s?next=%s' % (settings.LONGING_URL,request.path))  # 这里是比较简单的

方法二:

from django.contrib.auth.decorators import login_required

@login_required

def login(request):

```````

如果用户没有登录的话,会跳转到django默认的登录url'/accounts/login/'(这里的值通过settings文件中LOGIN_URL进行修改).并传递,当前访问url的绝对路径(登录成功后,会重定向到该路径)   

===================================================

创建用户:

user.objects.create_user(username='egon',password='1234')

User对象:

如果是真正的user对象,返回值恒为True.用于检查用户是否已经通过了认证,通过认证并不意味着用户拥有任何权限,甚至也不检查该用户是否处于激活状态,这只是表名用户成功通过了认证.在后台用request.user.is_authenticated()判断用户是否已经登录,如果True则可以向前台展示request.user.name

check_password(passwd)

用户修改密码之前让其输入原来的密码进行校验,通过了验证之后返回True

然后使用set_password()来修改密码

我们下面的示例就是一个简单的index页面,我们的用户如果登录的话就可以看到该页面的设置了用户权限的信息,

如果没有登录就会看到这个页面没有设置用户权限的信息.这两种状态都是通过我们的auth内置方法去实现的.

具体代码如下,

views视图函数:

前端HTML页面:

登录/注册页面

index页面(在这里进行逻辑判断用户是否是登录状态):

修改密码页面:

url配置: