用户认证

auth模块

from django.contrib import auth

django.contrib.auth提供了很多方法,接下来主要介绍三个:authenticate()、login(HttpRequest,user)、logout(request)

authenticate()

  提供了用户认证,即验证用户名以及密码是否正确,一般需要username、password两个关键字参数

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

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

user = auth.authenticate(username='name', password='pwd')

login(HttpRequest,user)

  该函数接受一个HttpRequest对象,以及一个认证了的User对象。此函数使用django的session框架给某个已认证的用户附加上session id等信息

from django.contrib import auth
def login(request):
    name = request.POST.get("username")
    pwd = request.POST.get("pwd")
    user = auth.authenticate(username=name, password=pwd)
    if user is not None:
        auth.login(request,user)
        return redirect('/index/')
    else:
        return HttpResponse('login failed!')

logout(request)注销用户

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

from django.contrib import auth
def logout(request):
    auth.logout(request)
    return redirect('/login/')

User对象

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

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

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

is_authenticated()

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

  示例

from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
#方法一
def index(request):
    '''
    用户登录后才能访问该页面
    如果用户没有登录就访问该页面的话直接跳转到登录页面
    用户在跳转的登录页面完成登陆后,自动访问跳转到之前访问的地址
    '''
    if not request.user.is_authenticated():
        return redirect('%s?next=%s'%(settings.LOGIN_URL, request.path))
    #若用户没有登录,则会跳转到django默认的登录URL'/accounts/login/'(这个值可以在settings文件中通过LOGIN_URL进行更改)
    #并传递当前访问url的绝对路径(登录成功后,会重定向到该路径)
    return render(request, 'index.html')

#方法二
#Django为我们设计好了一个用于此种情况的装饰器:login_required()
@login_required
def index(request):
    pass

创建用户

from django.contrib.auth.models import User
def reg(request):
    user = User.objects.create_user(username='lary', password='123')
    user.save()
    return HttpResponse('ok')

check_password(password)

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

修改密码

from django.contrib.auth.models import User
def change_pwd(request):
    user=User.objects.get(username='lary')
    user.set_password(password='321')
    user.save()
    return HttpResponse('OK')

   projectDemo

https://github.com/Leila2Utopia/authDemo

 

posted @ 2018-05-09 18:06  日新其德止于至善  阅读(305)  评论(0编辑  收藏  举报