Django之auth模块

Django之auth模块

1.auth模块介绍

需要使用auth模块需要导入
from django.contrib import auth
auth模块用作django的用户认证,具有非常简便高效的用法,通常情况下的用户认证需要借助于django的session(cookie),用户登入后给用户设置session值,从而用户的访问带着设置的session值来访,以此来保证用户的会话,用法如下:

def login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        print(username,password)
        # 验证用户输入,如果验证通过,则返回用户对象
        user = auth.authenticate(username=username,password=password)
         if user:
             request.session['username'] = user.username
            return redirect('/index/')
         else:pass
 return render(request,'login.html')

如上所示,使用了auth模块的认证功能auth.authenticate(需要认证的字段)
返回的是认证用户的对象,但是session还是自己手工写的。
进一步使用auth.login(request,user),把user对象封装到request中,且自动设置session

def login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        print(username,password)
        # 验证用户输入,如果验证通过,则返回用户对象
        user = auth.authenticate(username=username,password=password)
        if user:
            auth.login(request, user)
            return redirect('/index/')
    return render(request,'login.html')

2.认证后的相关

设置指定页面认证后才能访问,方法一:

使用装饰器的方法指定访问指定视图函数需要通过认证,需要导入模块
from django.contrib.auth.decorators import login_required

# 验证用户是否登入方法1
@login_required(login_url="/login/")
def index(request):
      return render(request,'index.html',{"request":request})
方法二

使用**is_authenticated()**方法进行认证验证

def index(request):
     if request.session.get("username"):
         print(request.session.get("username"))
     if request.user.username:
         print(request.user.username)
    # 判断是否是已登入用户--方法2
     if request.user.is_authenticated():
        return render(request,'index.html')
     else:return redirect('/login/')
    return render(request,'index.html',{"request":request})

3.此外还提供了校验密码和修改密码的方法

auth.login()方法将用户对象user封装到了request中,校验方法为
request.user.check_password(password)
修改密码的方式为
request.user.set_password(newPassword)
request.user.save()

4.auth模块实现登入注册修改密码小案例

4.1.视图函数
from django.shortcuts import render,redirect
from django.contrib import auth
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from app01 import models
# Create your views here.

def login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        print(username,password)
        # 验证用户输入,如果验证通过,则返回用户对象
        user = auth.authenticate(username=username,password=password)
        # if user:
        #     request.session['username'] = user.username
        #     return redirect('/index/')
        # else:pass
        # auth提供一个login方法,将user封装到request.user中,并设置session
        if user:
            auth.login(request, user)
            return redirect('/index/')

    return render(request,'login.html')
# 验证用户是否登入方法1
@login_required(login_url="/login/")
def index(request):
    # if request.session.get("username"):
    #     print(request.session.get("username"))
    # if request.user.username:
    #     print(request.user.username)
    # 判断是否是已登入用户--方法2
    # if request.user.is_authenticated():
    #     return render(request,'index.html')
    # else:return redirect('/login/')
    return render(request,'index.html',{"request":request})

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

def register(request):
    if request.method == "POST":
    #User.objects.create_user(username="monitor",email="monitor@xingyao.com",password="mon_1234")
        username = request.POST.get("username")
        password = request.POST.get("password")
        email = request.POST.get("email")
        models.UserInfo.objects.create_user(username=username,password=password,email=email)
        return redirect('/login/')
    return render(request,'register.html')

@login_required(login_url="/logout/")
def changePassword(request):
    if request.method == "POST":
        password = request.POST.get("password")
        newPassword = request.POST.get("newPassword")
        if password:
            if request.user.check_password(password):
                print("修改密码为:%s" %(newPassword))
                request.user.set_password(newPassword)
                request.user.save()
    return render(request,"changePassword.html")

5.扩展默认的auth_user表

默认的用户认证表字段有限,并不一定能够满足需求,需要对默认的表进行扩展,扩展的方式有两种
方式一:新建一张表,将扩展字段写在新表中,为新表和auth_user表创建一对一关系
方式二:使用继承的方式
app应用的models.py中定制新表

from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
# 扩展auth模块默认使用的auth_user表,增加以下字段
class UserInfo(AbstractUser):
    phone = models.CharField(max_length=11)
    address = models.CharField(max_length=50)

settings.py模块中设置使用自定义扩展表用作用户认证

# 使用继承方式扩展auth默认用户认证使用的表,配置如下,会自动在app01下的models.py模块中寻找UserInfo表
AUTH_USER_MODEL = 'app01.UserInfo'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值