Django-便捷的用户认证系统

Django默认用户认证系统

  1. Django自带用户认证系统
  • 它处理用户账号、组、权限以及基于cookie的用户会话。
  1. Django认证系统位置
  • django.contrib.auth包含认证框架的核心和默认的模型。
  • django.contrib.contenttypes是Django内容类型系统,它允许权限与你创建的模型关联。
  1. Django认证系统同时处理认证和授权
  • 认证:验证一个用户是否它声称的那个人,可用于账号登录。
  • 授权:授权决定一个通过了认证的用户被允许做什么。
  1. Django认证系统包含的内容
  • 用户:用户模型类、用户认证。
  • 权限:标识一个用户是否可以做一个特定的任务,MIS系统常 用到。
  • 组:对多个具有相同权限的用户进行统一管理,MIS系统常用到。
  • 密码:一个可配置的密码哈希系统,设置密码、密码校验。

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

它可以做什么?

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

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


image.png
  • 使用Django自带的用户模型类,我们可以节省大量代码,实际定义代码如下:

    from django.db import models
    from django.contrib.auth.models import AbstractUser
    
    class User(AbstractUser):
        mobile = models.CharField(max_length=11)
    
    
  • 在settings中添加行AUTH_USER_MODEL = '应用名.模型类名'

    # 指定本项目用户模型类
    AUTH_USER_MODEL = 'users.User'  # 应用名称.模型类名称
    

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

  • 因为父类AbstractUser已经包含了username、password、email、first_name、last_name、last_login、date_joined、is_active 、is_staff、is_superuse这些字段,无需再次定义。
  • username、password为必选字段,其余可选。
  • 手机号字段Django中没有自带,需要我们继承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)

迁移用户模型类

  • 用户认证系统中的用户模型类,是通过全局配置项AUTH_USER_MODEL 决定的。
  • 如果迁移自定义用户模型类,必须先配置 AUTH_USER_MODEL 。
  • 设置自定义模型类后,必须完成迁移.
    执行迁移命令:
    python manage.py makemigrations
    python manage.py migrate
    

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

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容