Django | Authentication | 默认用户认证系统
前言:
Django自带一个用户认证系统,用于处理用户账户、群组、许可和基于cookie的用户会话。
一、django默认的用户认证系统
1,Django的认证系统包含了身份验证和权限管理两部分。
认证:验证一个用户是否它声称的那个人,可用于账号登录。
授权:授权决定一个通过了认证的用户被允许做什么。
2,Django认证系统位置
django.contrib.auth 包含认证框架的核心和默认的模型。
django.contrib.contenttypes是Django内容类型系统,它允许权限与你创建的模型关联。
3,Django认证系统包含的内容:
用户:用户模型类、用户认证。
权限:标识一个用户是否可以做一个特定的任务,MIS系统常用到。
组:对多个具有相同权限的用户进行统一管理,MIS系统常用到。
密码:一个可配置的密码哈希系统,设置密码、密码校验。
注意:如果有一下情况,可以使用第三方包:
密码强度检查
登录请求限制
第三方认证
二、Django默认用户模型类
1, Django认证系统中提供了用户模型类User保存用户的数据。
User对象是认证系统的核心。
2, Django认证系统用户模型类位置
django.contrib.auth.models.User
06Django默认用户模型类.png
Django用户认证系统中的用户模型类可以自定义,继承自AbstractUser。
- 父类AbstractUser介绍
- User对象基本属性
创建用户(注册用户)必选: username、password
创建用户(注册用户)可选:email、first_name、last_name、last_login、date_joined、is_active 、is_staff、is_superuse
判断用户是否通过认证(是否登录):is_authenticated
- 创建用户(注册用户)的方法
user = User.objects.create_user(username, email, password, **extra_fields)
- 用户认证(用户登录)的方法
from django.contrib.auth import authenticate user = authenticate(username=username, password=password, **kwargs)
- 处理密码的方法
设置密码:set_password(raw_password)
校验密码:check_password(raw_password)
思考1:为什么Django默认用户模型类是User?
django.conf.global_settings AUTH_USER_MODEL = 'auth.User' 配置规则: AUTH_USER_MODEL = '应用名.模型类名'
Django用户模型类是通过全局配置项 AUTH_USER_MODEL 决定的
思考2:当项目注册数据中,mobile必填时,怎么办?
可以自定义用户模型类。继承自AbstractUser(可通过阅读Django默认用户模型类的源码得知),新增mobile字段。
from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. class User(AbstractUser): """自定义用户模型类""" mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号') class Meta: db_table = 'tb_users' verbose_name = '用户' verbose_name_plural = verbose_name def __str__(self): return self.username
用户模型类创建好后
- 1,通过以下命令生成迁移文件
python manage.py makemigrations
- 2,执行迁移文件,生成表
python manage.py migrate
三、在Web请求中的认证
每一次请求中都包含一个request.user属性。如果该用户未登陆,该属性的值是AnonymousUser,如果已经登录,该属性就是一个User模型的实例。
可以使用is_authenticated方法进行判断,如下:
if request.user.is_authenticated: # Do something for authenticated users. ... else: # Do something for anonymous users. ...
1,登录用户:此时我们假设:用户注册成功后即表示用户认证通过,对他进行状态保持。
login(request, user, backend=None)
在视图中,使用login()方法登录用户。它接收一个HttpRequest参数和一个User对象参数。该方法会把用户的ID保存在Django的session中。下面是一个认证和登陆的例子:
# 保存注册数据 try: user = User.objects.create_user(username=username, password=password, mobile=mobile) except DatabaseError: return render(request, 'register.html', {'register_errmsg': '注册失败'}) # 实现状态保持 login(request, user) # 响应注册结果 return redirect(reverse('contents:index'))
12session浏览器.png
13sessionredis.png
2,注销用户
logout(request)
from django.contrib.auth import logout def logout_view(request): logout(request) # Redirect to a success page.
注意:注意,被logout的用户如果没登录,不会抛出错误。
一旦logout,当前请求中的session数据都会被清空。
原文地址:https://www.jianshu.com/p/52935282dede
相关推荐
-
矩阵奇异分解 python基础
2019-8-29
-
Python中的闭包总结 python基础
2018-3-5
-
11道Python基本面试题|深入解答 python基础
2019-2-21
-
python装饰器在接口自动化测试中的应用 python基础
2020-6-11
-
大家都在学的python,都在用来干什么? python基础
2019-9-7
-
Python档案袋( Socket 与 ScoketServer 通信 ) python基础
2019-10-9
-
第一次Git使用以及码云(Gitee) python基础
2019-8-18
-
循环和分支学习笔记及练习 python基础
2019-8-25
-
Python将某个目录打包为`zip`文件 python基础
2019-10-16
-
脚本监控网络状态,输出日志并归档(V2) python基础
2019-10-9