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. 数论笔记(Full Version)

    数论笔记(Full Version) 一.数论基础: 1.整除: 重新定义除法: 对于计算式:\(a\div b\) 来说,其结果可以变化为以下的式子:$$a = b\lfloor \frac{a}{ ...

  2. STL unordered类容器浅谈

    一个代码: #include<cstdio> #include<vector> #include<functional> #include<algorithm ...

  3. Java开发者的Python快速进修指南:异常捕获

    在之前的学习中,我们已经讲解了函数和控制流等基本概念.然而,在接触实际业务时,你会发现异常捕获也是必不可少的一部分,因为在Java编程中,异常处理是不可或缺的.Python的异常捕获与Java的异常捕 ...

  4. fianl详解(适合新手)

    final 1.final是Java语言中的一个关键字 2.final表示最终的,不可变的. 3.final可以修饰变量以及方法,还有类等 4.final修饰的变量? 5.final修饰的方法? 6. ...

  5. 【译】使用 GitHub Copilot 编写 Git 提交

    在花费数小时修复 bug 或更新特性之后,我们开发人员最不愿意做的事情往往是仔细说明 Git 提交的内容.最新的 Visual Studio 预览版可以帮到您.使用新的生成 Git 提交消息特性来帮助 ...

  6. 记一次解决RestTemplate和HttpClient请求结果乱码的问题

    调用一个接口,发送POST请求,浏览器和Postman均返回正常,代码中用RestTemplate和HttpClient均返回乱码 开始一直以为是编码问题导致,网上查了解决方法,也看了源码,都不对症 ...

  7. 网安靶场环境_DVWA-读取文件报错File not found! Cookie中有两个security键

    DVWA-文件包含漏洞-读取文件报错-ERROR: File not found! Cookie中有两个security键 1 问题复现 (1)登录DVMA后,设置DVWA Security为Low. ...

  8. [ARC144E]GCD of Path Weights

    Problem Statement You are given a directed graph $G$ with $N$ vertices and $M$ edges. The vertices a ...

  9. 终结篇:==和equals有什么区别?

    == 和 equals 有什么区别?这个问题本身不难,但是被问到的频率很高,且大部分人的回答都不够全面,让人听了有种"恨铁不成钢"的感觉,所以今天咱们就来好好聊聊这个问题. 1.典 ...

  10. All in One, 快速搭建端到端可观测体系

    本文分享自华为云社区<All in One, 快速搭建端到端可观测体系>,作者:王磊. 随着云原生技术的应用,可观测成为云服务的主角,应用程序的部署密度及变化频率较传统环境有着巨大的变化, ...