Django-便捷的用户认证系统

2019-05-26  本文已影响0人  越大大雨天

Django默认用户认证系统

  1. Django自带用户认证系统
  1. Django认证系统位置
  1. Django认证系统同时处理认证和授权
  1. Django认证系统包含的内容

以上都是官方的介绍字段,比较枯燥,可先跳过。

它可以做什么?

1. 当需要创建用户注册models时,不再需要自己设计复杂表结构

案例:以如下注册页面为例,我们需要的数据库字段有用户名、密码、手机号


image.png

这里只是继承了AbstractUser类,并只自定义了一个手机号的字段,而其他字段都不需再定义和设计,就完成了我们需要的模型。

2. 当需要在数据库中添加注册用户时,不再需要自己操作数据库语法
当用户通过注册验证后,创建用户对象只需执行下行代码:

user = User.objects.create_user(username=username, password=password, mobile=mobile)

3. 用户登录无需手动与数据库数据对比,无需对密码执行加密对比操作

from django.contrib.auth import authenticate
user = authenticate(username=username, password=password)

3.1 自定义authenticate方法实现多账号登录

实现能让用使用注册用户名、手机号或者邮箱完成登录验证:

在自定义工具目录util中继承ModelBackend类,重写authenticate方法

from django.contrib.auth.backends import ModelBackend
import re
from users.models import User

class MeiduoModelBackend(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        try:
            # get方法查询到数据返回用户对象,未查询到则报错
            user = User.objects.get(username=username)
        except:
            try:
                user = User.objects.get(mobile=username)
            except:
                return None
        # 判断密码
        if user.check_password(password):
            return user
        else:
            return None

4. 保持用户登录状态无需手动创建session

from django.contrib.auth import login
login(request, user)

5.退出登录操作自动删除session

from django.contrib.auth import logout
logout(request)

迁移用户模型类

迁移后,mysql数据库用户表结构如下:

image.png
上一篇下一篇

猜你喜欢

热点阅读