auth组件

一、auth模块简介

auth模块是django自带的用户认证模块,包含了身份验证权限管理两部分。

身份验证用于核实某个用户是否合法,权限管理用于决定一个合法用户有哪些权限

默认情况下,使用django-admin startproject命令后,认证模块已经添加到settings文件中,如果没有请手动添加

INSTALLED_APPS中添加
`django.contrib.auth` 包含认证框架的核心以及默认模型
`django.contrib.contenttypes` 内容类型系统,用于给模型关联许可
-------------------------------------------------------------------
MIDDLEWARE中添加
`SessionMiddleware` 通过请求管理会话
`AuthenticationMiddleware` 将会话和用户关联

二、用户对象

在django中用户对象是用户认证系统的核心,只有一个用户模型就是User模型,它位于django.contrib.auth.models,使用auth_user表来存储用户数据

1.创建用户

create_user(username、password)-------普通用户

from django.contrib.auth.models import User
user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...) user是一个User类的实例,已经保存在了数据库内,你可以随时修改它的属性,例如:
user.last_name='fj'
user.save()

create_superuser(username、password)-----------超级用户

from django.contrib.auth.models import User
user = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)

2.修改密码

注:Django默认会对密码进行加密,因此,不要对密码进行直接操作

set_password(password)------设置密码

user.set_password(password='')
user.save()

check_password(password)-----检查密码是否正确

ok=user.check_password('密码')

需要提供当前请求用户的密码,正确返回True,错误返回False

3.用户验证

authenticate()

验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。

如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。

from django.contrib import auth
user = authenticate(username='usernamer',password='password')
if user:
#认证成功
else:
#认证失败

is_authenticated()用来判断是否通过了认证

def my_view(request):
if not request.user.is_authenticated():
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

4.User对象的属性

  • is_staff:用户是否拥有网站的管理权限
  • is_active:是否允许用户登录,设置为False可以在不删除用户的前提下禁止用户登录

三、在视图中认证用户

django使用session和中间件关联请求对象中和认证系统,每一次请求都包含一个request.user属性,表示当前用户,如果用户未登录,该值为AnonymousUser实例(匿名用户),如果登录它就是一个User模型的实例。

1.登录用户

login(HttpRequest,user)---会将用户的ID保存在django的session中

from django.contrib.auth import authenticate,login

def my_view(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user:
login(request,user)
return HttpResponse('登录成功')
else:
return HttpResponse('用户名或密码错误')

2.注销用户

logout(request)----无返回值

from django.contrib.auth import logout

def logout_view(request):
logout(request)
  • 当前请求的session信息会被全部删除,如果用户没有登录也不会报错

3.登录认证装饰器

login_requierd(redirect_field_name='next',login_url='/login/')

用于给视图添加登录校验

from django.contrib.auth.decorators import login_required

@login_required
def other_view(request):
...
  • redirect_field_name:修改的是浏览器 ? 后面的key值
  • login_url='/login/' 如果没有登录跳转到的页面 (局部设置)
  • settings.LOGIN_URL设置没有登录跳转的页面,传递当前路径为url字符串的参数(全局设置)
  • 如果已经登录,执行正常的视图

四、扩展默认的auth_user表

默认的auth_user表字段是固定的几个,需要扩展的话可以通过下面的方法

1.定义一个表模型,和User一对一管理

class UserDetail(models.Model):
phone=models.CharField(max_length=32)
# 一对一跟auth_user表做关联
# 如果是从外部引入的表模型,是不能加引号的
# 如果加引号,只是在当前model找
user=models.OneToOneField(to=User)

2.定义一个表模型,继承(AbstractUser类)

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
"""
用户信息表
"""
nid = models.AutoField(primary_key=True)
phone = models.CharField(max_length=11, null=True, unique=True) def __str__(self):
return self.username

建好模型后需要在settings中配置,

AUTH_USER_MODEL='app名.UserInfo'

注:一旦指定了新的表模型,之前的表模型就不能用了。

django-auth组件的更多相关文章

  1. Django Auth组件->扩展用户

    Auth用户 1.声明用户表 djangauth/settings.py..............................AUTH_USER_MODEL = 'app01.UserInfo' ...

  2. Django auth组件拓展 关联外部信息---------------------------- Profile 模式

    https://docs.djangoproject.com/en/2.1/topics/auth/customizing/ 官方文档. 网上的get_profile 方法不好用太假了 可能我没用明白 ...

  3. django第13天(auth组件,forms组件,中间件,csrf)

    django第13天(auth组件,forms组件) auth组件 -auth组件 -auth是什么? -django内置的用户认证系统,可以快速的实现,登录,注销,修改密码.... -怎么用? -( ...

  4. Django day16 Auth组件

    一:Auth组件 -django内置的用户认证系统,可以快速的实现,登录,注销,修改密码... -怎么用? (1)先创建超级用户: -python3 manage.py createsuperuser ...

  5. auth组件

    Django auth认证组件 简介 ''' Django auth认证组件提供了用户表的构建方式,认证接口,会话登录与注销接口. 中间件将会话登录用户保存到request对象中,这样不用从会话中获取 ...

  6. python 全栈开发,Day98(路飞学城背景,django ContentType组件,表结构讲解)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  7. Auth组件,Forms组件

    一.Auth组件默认auth_user表常用操作 #1.配置settings,使django与数据库连接 DATABASES = { 'default': { 'ENGINE': 'django.db ...

  8. Django - Xadmin 组件(一)

    Django - Xadmin 组件(一) Web 应用中离不开的就是后台管理, Django 自带的 admin 组件提供了一部分内容,但往往现实项目中会有更多的需求,所以自定义自己的后台管理就十分 ...

  9. Django——auth用户认证

    之前我们在进行用户校验的时候,总是从数据库中获取数据,然后再进行对比,就像如下这样: def login(request): if request.method == "POST" ...

  10. 自定义 Django admin 组件

    摘要:学习 Django admin 组件,仿照源码的逻辑,自定义了一个简易的 stark 组件,实现类似 admin 的功能. 可自动生成 url 路由,对于model 有与之相应的配置类对象,可进 ...

随机推荐

  1. SpringBoot自动装配源码解析

    序:众所周知spring-boot入门容易精通难,说到底spring-boot是对spring已有的各种技术的整合封装,因为封装了所以使用简单,也因为封装了所以越来越多的"拿来主义" ...

  2. Sptringboot 添加子项目

    1:复制一个子项目,修改项目名 2:修改启动类 3:修改pom.xml 4:打开project structure  选择Modules 下一步下一步 5:添加主项目的pom.xml  在<mo ...

  3. 洛谷P1122最大子树和题解

    题目 一道比较好想的树形\(DP\) 完全可以用树形DP的基本思路,递归,然后取最优的方法. \(Code\) #include <iostream> #include <cstri ...

  4. 相似度度量:欧氏距离与余弦相似度(Similarity Measurement Euclidean Distance Cosine Similarity)

    在<机器学习---文本特征提取之词袋模型(Machine Learning Text Feature Extraction Bag of Words)>一文中,我们通过计算文本特征向量之间 ...

  5. Codeforces Round #549 (Div. 1)

    今天试图用typora写题解 真开心 参考 你会发现有很多都是参考的..zblzbl Codeforces Round #549 (Div. 1) 最近脑子不行啦 需要cf来缓解一下 A. The B ...

  6. did not finish being created even after we waited 189 seconds or 61 attempts. And its status is downloading

    did not finish being created even after we waited 189 seconds or 61 attempts. And its status is down ...

  7. POJ1988 Cube stacking(非递归)

    n有N(N<=30,000)堆方块,开始每堆都是一个方块.方块编号1 – N. 有两种操作: nM x y : 表示把方块x所在的堆,拿起来叠放到y所在的堆上. nC x : 问方块x下面有多少 ...

  8. Luogu3768简单的数学题

    题目描述 题解 我们在一通化简上面的式子之后得到了这么个东西. 前面的可以除法分块做,后面的∑T2∑dµ(T/d)是积性函数,可以线性筛. 然后这个数据范围好像不太支持线性筛,所以考虑杜教筛. 后面那 ...

  9. 哈尔滨工程大学第十四届程序设计竞赛(同步赛)F 小帆帆走迷宫(dp)

    题目描述 小帆帆被困在一个 NxN 的方格矩阵迷宫,每个格子中都有一个整数 A[i][j].小帆帆从迷宫起点(左上角)格子 A[1][1]开始走,每一步可以向右或向下移动,目标是移动到迷宫的出口右下角 ...

  10. 20165223《网络对抗技术》Exp3 免杀原理与实践

    目录 -- 免杀原理与实践 免杀原理与实践 本次实验任务 基础知识问答 免杀扫描引擎 实验内容 正确使用msf编码器,msfvenom生成jar等文件,veil-evasion,加壳工具,使用shel ...