Auth认证组件

目录

  • Auth模块是什么
  • 扩展auth_user

Auth认证组件

Auth模块是什么

Auth模块是Django自带的用户认证模块

  • 内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据

  • 提供了对auth_user表的注册、登陆、认证、注销、修改密码等功能


auth模块常用方法

from django.contrib import auth
from django.contrib.auth.models import User

1 创建用户

User.objects.create()  # 密码是明文
User.objects.createuser()  # 基本都用它 
User.objects.createsuperuser()  # 邮箱要给数据
# views
def reg(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        User.objects.create_superuser(username=username,password=password,email='123@qq.com')
    return render(request, 'reg.html')

2 校验用户名和密码是否正确

auth.authenticate(username=username,password=password)  # 用户名和密码两个一个都不能少
# views
def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user_obj = auth.authenticate(request, username=username, password=password)
        # 用户名密码正确返回的是用户对象
        # 错误返回None
        if user_obj:
            auth.login(request, user_obj)
            # 只要执行了这一句话,之后在任意可以获取到request对象的地方
            # 都可以通过request.user获取到当前登录的用户对象
            return HttpResponse("登陆成功")
    return render(request, 'login.html')

3 保存用户登陆状态

auth.login(request,user_obj)  # 这一句执行之后 request.user获取当前登录的用户对象

4 如何判断当前用户是否登录,以及如何获取当前登录用户对象

# views
def get_user(request):
    print(request.user)  # ka 登录用户对象
    print(request.user.is_authenticated())  # True 判断是否登录
    return HttpResponse('get_user')

5 校验用户是否登录

局部配置

# 校验用户是否登录装饰器
from django.contrib.auth.decorators import login_required
@login_required(login_url='/login/')
# views
from django.contrib.auth.decorators import login_required
@login_required(login_url='/login/')
def index(request):
    return HttpResponse('index页面')

全局配置

配置文件中写以下代码
LOGIN_URL = '/login/'
@login_required
def set_password(request)

如果两个都设置了 那么优先执行局部配置

6 修改密码

def set_password(request):
    if request.method == 'POST':
        old_password = request.POST.get('old_password')
        new_pwd = request.POST.get('new_password')
        # 先校验旧密码是否正确
        is_right = request.user.check_password(old_password)
        # 再去修改密码
        if is_right:
            request.user.set_password(new_pwd)
            request.user.save()
    return render(request, 'set_password.html')

7 注销功能

def logout(request):
    auth.logout(request)
    return HttpResponse('注销成功')



扩展auth_user

1 利用一对一表关系

2 利用类的继承

from django.contrib.auth.models import User, AbstractUser
class Userinfo(AbstractUser):
    phone = models.BigIntegerField()
    # 扩展字段,尽量不要与原先表中的字段冲突

配置文件

AUTH_USER_MODEL = '应用名.表名'

django就会将新建的表来替换auth_user表

并且之前auth模块所有的功能不变 参照的也是userinfo表

你可能感兴趣的