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. 失去焦点布局在ios12-微信6.7.0版本以上不回滚的解决方案

    微信页面input获取焦点,布局上移,失去焦点布局在ios12-微信6.7.0版本以上不回滚的解决方案: setTimeout(function(){ let scrollHeight = docum ...

  2. Nginx访问配置

    配置HTTP协议(使用80默认端口,非HTTPS配置SSL)访问网站 包括RestAPI的配置和RestAPI文档的配置 例如: server { # 配置为HTTP协议 listen ; serve ...

  3. python正则匹配示例

    text="山东省临沂市兰山区 市委大院中区21号楼4单元 276002 奥特曼1号 18254998111" #匹配手机号 m=re.findall(r"1\d{10} ...

  4. ubuntu下面配置apache

    1.在这个目录下面修改这个文件 把那个注释了 2.在这个目录下面修改这个文件 把这个改为index的目录

  5. [搬运] 将 Visual Studio 的代码片段导出到 VS Code

    原文 : A Visual Studio to Visual Studio Code Snippet Converter 作者 : Rick Strahl 译者 : 张蘅水 导语 和原文作者一样,水弟 ...

  6. Stars project

    说明:收藏一些比较好的开源项目 Python实现了所有的排序算法 Github:https://github.com/TheAlgorithms/Python 该项目用Python实现了所有的排序算法 ...

  7. Hadoop系列(一):Hadoop集群搭建

    环境:CentOS 7 JDK: 1.7.0_80 hadoop:2.8.5 两台机器:master(192.168.56.101)   slave(192.168.56.102) 配置基础环境 1. ...

  8. fast-ai lesson1 错误处理(CNN创建)

    报错信息: name 'ConvLearner' is not defined 在最新的fast ai包中,ConvLearner已经被create_cnn取代,所以替换为下列语句就好了: learn ...

  9. Re.多项式除法/取模

    前言 emmm又是暂无 前置 多项式求逆 多项式除法/取模目的 还是跟之前一样顾名思义] 给定一个多项式F(x),请求出多项式Q(x)和R(x),满足F(x)=Q(x)∗G(x)+R(x),R项数小于 ...

  10. 微信小程序中-折线图

    echarts配置项太多了,还是一点点积累吧~~~~~ 当然前提条件还是得老老实实看echarts官方文档 :https://echarts.baidu.com/ 今天主要就介绍下我在工作中通过ech ...