Django框架(十八)—— auth框架:用户登录、注册、认证
auth模块
[TOC]
一、什么是author模块
Auth模块是Django自带的用户认证模块,可以实现包括用户注册、用户登录、用户认证、注销、修改密码等功能。默认使用 auth_user 表来存储用户数据。
二、auth模块的使用
1、创建超级用户(create_superuser())
创建超级用户就是在auth_user表中插入数据,密码是加密的,因此不能手动在数据库中插入数据
(1)用命令创建
python3 manage.py createsuperuser
(2)用Python代码创建
from django.contrib.auth.models import User
user = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)
2、验证用户(authenticate())
验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。如果认证成功(用户名和密码正确有效),便会返回一个 User 对象
from django.contrib import auth
user = auth.authenticate(request, username=name, password=pwd)
相当于是在数据库中查询:
user=models.User.objects.filter(name=name,pwd=pwd).first()
3、登录用户(login())
该函数接受一个HttpRequest对象,以及一个经过认证的User对象。
该函数实现一个用户登录的功能。它本质上会在后端为该用户生成相关session数据。
user = auth.authenticate(username=username, password=password)
if user is not None:
login(request, user)
return HttpResponse('登录成功')
4、登录成功
一旦登录成功,调了这个函数login(request,user),在以后的视图类(函数)中的request中就会有一个user对象,就是当前已登录的用户对象。
5、注销(logout())
该函数接受一个HttpRequest对象,无返回值。
当调用该函数时,当前请求的session信息会全部清除,即调用request.session.flush()。该用户即使没有登录,使用该函数也不会报错。
auth.logout(request)
6、登录认证装饰器
快捷的给某个视图添加登录校验。
若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。
如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。
from django.contrib.auth.decorators import login_required
@login_required(redirect_field_name='eee',login_url='/login/')
# redirect_field_name:修改?后面的key值,一般不回去修改
# login_url:如果没有登录,跳转到的页面
# login_url局部配置
@login_required(login_url='/login/')
# login_url全局配置
# 在setting文件中配置
LOGIN_URL='/login/'
直接使用 @login_required
7、创建普通用户(create_user())
from django.contrib.auth.models import User
user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...)
8、校验密码(check_password())
# 先拿到用户(可以是登录用户,可以现查)
user = request.user
# 或者
user = authenticate(username=username, password=password)
pwd = request.POST.get('pwd')
ret = user.check_password(pwd)
9、修改密码(set_password())
注意:设置完一定要调用用户对象的save方法!!!
修改密码时,可以先校验原密码输入是否正确,原密码正确再开始修改密码
user.set_password(pwd)
user.save()
10、is_authenticated()
用来判断当前请求是否通过了认证。如果通过验证,是true,反之false
ret = request.user.is_authenticated()
11、删除用户
删除用户和用orm在表中删除数据一样
12、User对象的其他属性
# 在网站上线以前,将is_active和is_staff设置为False
is_active # 禁止登录网站(用户还存在,封号)
is_staff # 是否对网站有管理权限(能不能登录admin)
request.user.is_active = False
request.user.is_staff = False
三、扩展默认的auth_user表
1、方法一:定义一个表模型,跟User一对一关联
from django.contrib.auth.models import 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):
# username,password...都继承了
phone=models.CharField(max_length=32)
sex=models.BooleanField()
注意:
一旦我们通过继承来实现扩展auth_user表,那么做数据库迁移,以后就没有auth_user这个表了,以后认证组件用的表就是UserInfo。原来使用 auth_user 表模型的地方全部要用新的表模型——UserInfo
引用Django自带的User表,继承使用时需要设置,在setting中对新表进行配置:
AUTH_USER_MODEL ='app01.UserInfo'
Django框架(十八)—— auth框架:用户登录、注册、认证的更多相关文章
- vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)
前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...
- Django实现用户登录注册
本文将会介绍小白如何完成一个用户登录注册系统 新建一个Django项目,名字为login_register,并且使用命令manage.py startapp.User(名字自己随便起) 最终djang ...
- javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
- javaweb(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
- Spring Boot 2.X(十八):集成 Spring Security-登录认证和权限控制
前言 在企业项目开发中,对系统的安全和权限控制往往是必需的,常见的安全框架有 Spring Security.Apache Shiro 等.本文主要简单介绍一下 Spring Security,再通过 ...
- Java Spring+Mysql+Mybatis 实现用户登录注册功能
前言: 最近在学习Java的编程,前辈让我写一个包含数据库和前端的用户登录功能,通过看博客等我先是写了一个最基础的servlet+jsp,再到后来开始用maven进行编程,最终的完成版是一个 Spri ...
- Django商城项目笔记No.5用户部分-注册接口-短信验证码
Django商城项目笔记No.4用户部分-注册接口-短信验证码 短信验证码也保存在redis里(sms_code_15101234567) 在views中新增SMSCodeView类视图,并且写出步骤 ...
- android安卓Sqlite数据库实现用户登录注册
看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...
- 纯JSP实现用户登录注册,记事本
没有美化,没有格式,没有样式 1.JSP登陆注册 将用户注册的信息保存在application对象中,用于登录时的验证. 首页如下: 如果未登录,在 session 中找不到 currentUser ...
- JavaWeb学习 (二十一)————基于Servlet+JSP+JavaBean开发模式的用户登录注册
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
随机推荐
- sqlserver怎么copy一张表为另一张表
SQL Server中,如果目标表存在:insert into 目标表 select * from 原表;SQL Server中,,如果目标表不存在:select * into 目标表 from 原表 ...
- ---搭建springMvc框架,希望对初学者有所参考
Spring Mvc ==> Struts2 spring 无法替代 myBatis 工作量大 要自己操作sql语句 ==> hibernate Spring Mvc 取代St ...
- Jmeter接口测试加解密及Bean Shell使用案例
Jmeter接口测试加解密及Bean Shell使用案例 https://blog.csdn.net/russ44/article/details/56009084 本文以base64加解密为例: 一 ...
- ingress-nginx配置https文件访问
1.先将证书文件上传至服务器特定目录.比如:/root/ssl 假设证书名称为:server.crt和server.key 2.现在主节点后台创建私密文件. kubectl create secret ...
- js 屏蔽网页快捷键代码
<script> function KeyDown(){ //屏蔽鼠标右键.Ctrl+n.shift+F10.F5刷新.退格键 //alert("ASCII代码是:"+ ...
- mqtt haproxy 代理及负载搭建
目录 mqtt 分布集群搭建 haproxy 安装配置 解压 安装 配置haproxy.cfg 启动haproxy 配置mqtt 测试 负载配置说明 负载均衡算法 ACL规则定义 全局配置 默认配置 ...
- face_recognition人脸识别框架
一.环境搭建 1.系统环境 Ubuntu 17.04 Python 2.7.14 pycharm 开发工具 2.开发环境,安装各种系统包 人脸检测基于dlib,dlib依赖Boost和cmake $ ...
- CSS中强大的EM(转)
转自:https://www.w3cplus.com/css/px-to-em CSS中强大的EM 作者:大漠 日期:2011-10-27 点击:97370 em 长度单位 编辑推荐:3月31日前,点 ...
- pipeline语法之判断一个文件存在与否
先看一个例子,原理,根据命令返回的状态值来判断它的存在与否 pipeline { agent any stages { stage("check file if exists"){ ...
- 在树莓派3B上搭建LAMP
一.安装apache2 sudo apt-get install apache2 在电脑上输入树莓派的网址会有如下显示 二.安装Mysql sudo apt-get install mysql-ser ...