Auth模块使用方法大全

auth认证

导包

from django.contrib import auth

默认数据库中使用auth_user表javascript

建立超级用户

python manage.py createsuperuser

验证登录

auth.authenticate(request,username,password)

校验用户密码和帐号,经过返回具体的用户对象html

添加session,标识已登录

auth.login(request,user)

接受request和前面经过登录验证的user对象,将session key保存在浏览器,数据保存在django_session表中。java

登录验证装饰器

用来装饰须要登录后给浏览器添加session后才能访问的视图添加检测,若是有session则放行,不然跳转指定页面,一般咱们设置成登录页面。python

#导入auth 登录装饰器
from django.contrib.auth.decorators import login_required

#在须要登录后才能访问的页面视图前面添加装饰器
@login_required
def index():
    pass

这样浏览器在访问index页面时,会先检查是否有session,若是没有,则跳转默认页面,并将原访问页面做为get参数放在跳转页面中,在登录成功后会跳转以前要访问的页面nginx

http://127.0.0.1:8000/accounts/login/?next=/index/
# 例如我要访问index页面,可是我没session,
# 这时装饰器会默认跳转到/accounts/login/页面,
# 并将index页面的url以next参数的形式包含在其中
#,这样在你登录后,还能返回原页面

能够在django的settings中修改装饰器默认跳转的Urldocker

#配置auth认证登录装饰器的默认跳转地址
LOGIN_URL = '/login/'

注销方法

auth.logout(request)

接受一个request,清除当前request中的session并在数据表中django_session数据也会被清除。
经常使用方法,搭配一个视图使用:数据库

def logout(request):
    auth.logout(request)
    return redirect('/login/')

例如在页面上使用a标签和button按钮点击跳转注销视图,注销后跳回登录页面django

request.user属性

auth组件的中间间中作了这样一个事情,当request请求来时,判断是否有session,若是有session则会根据session去django_session中找出相应的用户的信息,并赋值给request.user属性,也就是request.user=user是一个User数据对象,不然返回一个匿名的对象给request.user,该对象调用全部的方法都返回None浏览器

def index(request):
    print(request.user)
# 是一个懒加载数据对象

这时咱们能够把request.user看成一个普通的orm中的数据对象ruby

is_authenticated

判断用户对象是否经过了校验

request.user.is_authenticated
# 返回一个布尔值

实例

from django.shortcuts import render,HttpResponse,redirect
from django.contrib import auth
from django.contrib.auth.decorators import login_required
# Create your views here.

def login(request):
    if request.method=='POST':
        username = request.POST.get('username')
        pwd = request.POST.get('password')
        print(username,pwd)
        #利用auth验证用户名和密码是否正确验证成功实例化一个数据对象不然返回none
        user = auth.authenticate(request,username=username,password=pwd)
        if user:
            #登陆成功后,给登陆用户在request中增长session,存在数据库
            auth.login(request,user)
            return redirect('/index/')
        else:
            msg = '错误'
            print('用户名错误')
            return redirect('/index/')

    return render(request,'login.html')


def logout(request):
    auth.logout(request)
    return redirect('/login/')
@login_required()
def index(request):
    print(request.session.__dir__)
    print(request.user.password)
    return render(request,'Index.html')

auth中user表的使用

由于auth中的用户表存的密码是密文形式,因此不能直接使用orm中creat语句

#导入user表
from django.contrib.auth.models import User

def register(request):
    form_objs = UserInfoForm()
    if request.method=='POST':
        form_objs= UserInfoForm(request.POST)
        if form_objs.is_valid():
            username = form_objs.cleaned_data['name']
            password = form_objs.cleaned_data['pwd']
            #只能使用auth表的create_user方法去建立用户
            User.objects.create_user(username=username,password=password)
            return redirect('/login/')
    return render(request,'register.html',locals())

建立超级用户的方法和上面同样,只不过变成User.objects.create_superuser

校验密码和设置密码

在用户登录成功后一般须要验证密码和修改密码,auth组件也提供了相应的方法

# user为User表具体的对象,接受一个密码,返回布尔值
user.check_password(password)


# user为User表具体的对象,接受一个密码,修改原密码,必定要记得save()保存
user.set_password(password)
user.save()

扩展auth_user自定义表

1. 建表继承AbstractUser

from django.db import models

# Create your models here.
from django.contrib.auth.models import  AbstractUser

class UserInfo(AbstractUser):
    #编写扩展字段,而后去settings告诉django auth组件会用这张表
    phone =models.CharField(max_length=11)

2. 在django配置指定

AUTH_USER_MODEL = app01.UserInfo
#格式:app名称.表名

总结

auth认证
        默认Django内置的认证系统, 默认在数据库中使用auth_user
        from django.contrib import auth
1. 建立一个超级用户
    python manage.py createsuperuser
2. 验证用户名和密码是否正确
    user = auth.authenticate(request, username, password)
3. 登陆
    auth.login(request, user)   --> user是上一步的获得的user对象
4. 注销
    auth.logout(request)        --> 将当前请求的session数据删除

5. 登陆认证的装饰器
    auth.decorators.login_required
    默认跳转的登陆url: /accounts/login/
    在settings.py中 配置 LOGIN_URL = "你的登陆url"

6. is_authenticated()
    判断当前request.user是否通过认证,通过认证就返回True,不然是False
    
7. AuthenticationMiddleware中间件究竟作了什么?
    request.user = user, 匿名用户对象
    
auth_user表的方法
    8. create_user()
    建立用户,不一样与普通orm目的是使密码加密保存
    9. create_superuser()
    建立超级用户
    10. check_password()
    检查密码
    11. set_password()
    设置密码

使用流程:

  1. 登录时校验用户密码 auth.authenticate(username,password)生成user对象
  2. 给经过校验的user对象添加session, auth.login(request,user)
  3. 添加session成功后,后续的请求,request.user=user对象,可拿到数据库数据
  4. 注销,auth.logout(request),将浏览器保存的sessionkey清除掉
  5. user表的建立用户,不一样于普通orm操做,由于密码须要加密保存,User.objects.create_user(), User.objects.create_superuser().
  6. user对象的方法:user.check_password(password),user.set_password(passord)
  7. 判断用户是否经过校验,request.user.is_authenticated(),返回一个布尔值(不经常使用)
相关文章
相关标签/搜索