auth认证模块前戏

django后台管理功能

前戏:django自带一个admin路由 但是需要我们提供管理员账号和密码
如果想要使用admin后台管理 需要先创建表 然后创建管理员账号
直接执行数据库迁移命令即可产生默认的auth_user表 该表就是admin后台管理默认的认证表
1.创建超级管理员
python38 manage.py createsuperuser 基于auth_user表编写用户相关的各项功能
登录、校验用户是否登录、修改密码、注销登录等

第一次迁移数据库之后会自动创建auth_user表:

该表就是admin后台管理默认的认证表

创建超级管理员

python38 manage.py createsuperuser

示例:

创建完之后查看auth_user表:

1表示该用户是超级管理员。

管理员的密码经过了加密。

使用该账号登录django后台管理:

不仅可以创建超级管理员,还可以创建普通用户。

只不过使用终端只允许你创建超级管理员,只能用业务逻辑的形式创建普通用户。

auth认证相关模块及操作

from django.contrib import auth
from django.contrib.auth.models import User
1.用户注册功能
User.objects.create_user(username=username, password=password)
2.判断用户名和密码是否正确
user_obj = auth.authenticate(request,
username=username,
password=password)
3.判断用户是否登录
request.user.is_authenticated
4.获取登录用户对象数据
request.user
5.校验用户是否登录装饰器
from django.contrib.auth.decorators import login_required
@login_required(login_url='/login/') 局部配置
@login_required 全局配置
配置文件中LOGIN_URL = '/login/'
6.校验原密码是否正确
request.user.check_password(原密码)
7.修改密码
request.user.set_password(新密码)
request.user.save()
8.退出登录
auth.logout(request)

用户注册

前端页面:

视图函数:

先导入auth模块,使用auth.authenticate方法

这里是只传入了用户名。必须要传入用户名和密码。

导入auth_user表:

使用create方法注册用户:

查看auth_user表:

此时密码没有进行加密。

使用create_user方法:

会对密码进行加密:

用户登录

登录时,用户输入的是密码明文,而我们的auth_user表存储的是加密的密码,所以无法进行正常比对,需要经过auth模块的方法比对:

当用户名和密码输入正确时,auth.authenticate方法会返回用户对象,输入不正确时返回None:

登录成功后,给客户端返回加密字符串:

auth.login: 会自动去django_session表里创建一个键值对,然后把用户对象存在这个表里面,最后返回给前端浏览器一个加密字符串。

查看session表:

request.user获取当前登录的用户对象数据:

对于没有登录的用户:

request.user会拿到匿名用户。

网站首页效果

需求:已经登录的用户,显示用户的名字。用户未登录,显示登录注册。

判断当前用户对象是否已登录:

这个方法可以判断当前的请求是否已经登录。

前端页面:

校验用户登录的装饰器

示例:

被login_required装饰的函数,只有登录的用户(携带cookies)才能查看。

没有登录的用户,访问会跳转到登录页面:

只不过这个登录页面的路由,是别人写好的,但是我们也可以自定义这个路由。

控制跳转的路由:

可以让不同的视图函数跳转到不同的页面。

当视图函数特别多的情况下:

login_url='/login/'这行代码会反复写。还可以进行优化。

可以在setting文件中,写一个全局配置:

这里的意思是:如果使用login_required装饰视图函数不指定跳转的路由,就使用配置文件中指定的路由LOGIN_URL

如果全局和局部都指定了路由,那么会跳转到哪个路由?

这种情况下会跳转到局部指定的路由。

用户修改密码

视图函数:

登录的用户才能修改密码。

前端页面:

视图函数:

获取到的原密码是明文的,auth_user表里存储的密码是密文的,我们无法比较。此时用户已经登录,所以我们可以用request.user拿到用户数据对象。

使用request.user对象的方法校验密码:

用户注销登录

视图函数:

会自动把浏览器存储的cookies、auth表里存储的用户数据删除。

auth_user表扩展

还想使用auth模块的功能 并且又想扩展auth_user表的字段
思路1:一对一字段关联
思路2:替换auth_user表
步骤1:模型层编写模型类继承AbstractUser
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
# 填写AbstractUser表中没有的字段
phone = models.BigIntegerField()
desc = models.TextField()
步骤2:一定要在配置文件中声明替换关系
AUTH_USER_MODEL = 'app01.UserInfo'
ps:替换还有一个前提 就是数据库迁移没有执行过(auth相关表没有创建)

问题:我们想使用django生成的auth_user表,但是又觉得这个表的字段不够多。

如何给auth_user表扩展更多的字段?

思路1:一对一字段关联

在model再建模型表:

我们的表的数据和auth_user表的数据一一对应。

思路2:替换auth_user表(重要)

首先在模型层导入真正的auth_user表:

我们之前导入的User,继承于AbstractUser。

所以我们写一个模型类,继承于AbstractUser:

所以我们可以在继承了auth_user表的基础上,进行扩展。

注意不要填写已有的字段,会冲突。

注意:一旦我们写了一个模型类,继承了AbstractUser,就相当于要替换django自动生成的auth_user表,取而代之的是我们的表(userinfo)

想这么做的话,要确保我们没有执行过数据库迁移命令,必须保证使用的是一个全新的库。不可以使用已经产生过auth_user表的数据库。

并且还要在配置文件中加一句话:

示例:

之后所有基于auth_user表的操作,都会使用我们创建的这张表。

练习

1.利用auth模块编写一个网站导航条相关的功能(用自己创建的表)
也可以直接在图书管理系统中切入用户相关的功能
导航条右侧 用户没有登录现实 登录 和 注册
用户登录之后 现实当前用户名及登录之后的一些操作 修改密码 退出登录

auth认证模块 auth_user表扩展的更多相关文章

  1. csrf跨站请求伪造、csrf校验策略、csrf相关装饰器、auth认证模块、auth认证相关模块及操作、扩展auth_user表

    今日内容 csrf跨站请求伪造 钓鱼网站:模仿一个正规的网站 让用户在该网站上做操作 但是操作的结果会影响到用户正常的网站账户,但是其中有一些猫腻 eg:英语四六级考试需要网上先缴费,但是你会发现卡里 ...

  2. 12月23日内容总结——csrf跨站请求伪造、校验策略、相关装饰器,auth认证模块及相关操作,拓展auth_user表

    目录 一.csrf跨站请求伪造 概念引入 概念讲解 二.csrf校验策略 概念讲解 form表单操作csrf策略 ajax请求csrf策略 三.csrf相关装饰器 四.auth认证模块 五.auth认 ...

  3. auth 认证模块

    . auth认证模块: http://www.cnblogs.com/liwenzhou/p/9030211.html auth模块的知识点: . 创建超级用户 python manage.py cr ...

  4. csrf跨站请求伪造、csrf相关装饰器、auth认证模块、基于django中间件设计项目功能

    目录 csrf跨站请求网站 什么是csrf跨站请求网站 经典例子-钓鱼网站 模拟 如何避免这种现象(预防) 如何在django中解决这个问题 form表单 ajax csrf相关装饰器 FBV CBV ...

  5. Django框架:13、csrf跨站请求伪造、auth认证模块及相关用法

    Django框架 目录 Django框架 一.csrf跨站请求伪造 1.简介 2.csrf校验策略 form表单csrf策略 ajax请求csrf策略 3.csrf相关装饰器 FBV添加装饰器方式 C ...

  6. django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块

    CBV加装饰器 第一种 @method_decorator(装饰器) 加在get上 第二种 @method_decorator(login_auth,name='get') 加在类上 第三种 @met ...

  7. Django--csrf跨站请求伪造、Auth认证模块

    form表单中使用跨站请求伪造 { % csrf_token % } 会动态生成一个input框,内部的value是随机刷新的 如果不想校验csrf from django.views.decorat ...

  8. Django之Auth认证模块

    一.Auth模块是什么 Auth模块是Django自带的用户认证模块: 我们在开发网站的时候,无可避免的需要设计实现网站的用户系统,此时我们需要实现包括用户注册,用户登陆,用户认证,注销修改密码等功能 ...

  9. Auth认证模块

    1.auth简介 auth是什么? auth是django内置的用户认证系统,可以快速的实现:登录,注销,修改密码........ 2.autho的使用 1)先创建超级用户 python3 manag ...

  10. Django进阶-auth集成认证模块

    auth认证模块是Django内置集成的一个用户认证模块. auth认证模块方法 方法 释义 auth.authenticate() 认证校验 auth.login(request,user) 封装认 ...

随机推荐

  1. 物体三维模型的构建:3DSOM软件实现侧影轮廓方法

      本文介绍基于3DSOM软件,实现侧影轮廓方法的空间三维模型重建. 目录 1 背景知识 1.1 三维信息获取方法 1.2 侧影轮廓方法原理及其流程 2 三维模型制作 2.1 马铃薯三维模型制作 2. ...

  2. 错误记录-MariaDB连接异常

    简介: 问题: C#,VS2022,mariadb-10.11.5-winx64,using MySql.Data.MySqlClient; 在执行connection.Open()时抛出异常:Sys ...

  3. React、Umi、RN 整体理解

    可以少去理解一些不必要的概念,而多去思考为什么会有这样的东西,它解决了什么问题,或者它的运行机制是什么? React 1. React 起源和发展(是什么?) React 是用于构建用户界面的 Jav ...

  4. Kotlin协程系列(一)

    一.协程的定义 最近看了一本有关kotlin协程的书籍,对协程又有了不一样的了解,所以准备写一个关于kotlin协程系列的文章. 言归正传,我们在学习一个新东西的时候,如果连这个东西"是什么 ...

  5. [Codechef REBXOR]Nikitosh and xor (Trie,异或)

    题目传送门 分析:首次考虑暴力枚举 \(l_{1},r_{1},l_{2},r_{2}\),配合前缀和时间复杂度 \(O(N^{4})\),需要想办法优化.对于这种两段区间不重合的,我们考虑枚举两段区 ...

  6. python3 打包上传pypi失败及解决方法

    1.打包及上传 1.1.安装构建和打包工具 pip3 install build # 构建包的工具 pip3 install twine # 上传包的工具 pip3 install wheel #he ...

  7. 海上液化天然气 LNG 终端 | 图扑数字孪生

    关于 LNG 液化天然气 (Liquefied Natural Gas,简称 LNG) 在能源转型过程中被广泛认可为相对较清洁的能源选择. 相对于传统的煤炭和石油燃料,LNG 的燃烧过程产生的二氧化碳 ...

  8. [NOI online2022普及B] 数学游戏

    题目描述 Kri 喜欢玩数字游戏. 一天,他在草稿纸上写下了 \(t\) 对正整数 \((x,y)\),并对于每一对正整数计算出了 \(z=x\times y\times\gcd(x,y)\). 可是 ...

  9. Google Guava提供的特殊的Table集合

    1.Table 是个啥? 是一个特殊的映射,其中两个键可以在组合的方式被指定为单个值.它类似于创建映射的映射. 当你想使用多个键做索引的时候,你可能会用类似 Map<rowKey, Map< ...

  10. 文心一言 VS 讯飞星火 VS chatgpt (164)-- 算法导论13.1 4题

    四.用go语言,假设将一棵红黑树的每一个红结点"吸收"到它的黑色父结点中,使得红结点的子结点变成黑色父结点的子结点(忽略关键字的变化).当一个黑结点的所有红色子结点都被吸收后,它可 ...