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 ...
随机推荐
- SSDT and Shadow SSDT table
参考:http://x86.renejeschke.de/html/file_module_x86_id_313.html http://msdn.microsoft.com/en-us/librar ...
- MFC坐标问题
页面空间中的矩形被称为窗口,设备空间中的矩形被称为视口. 页面空间与设备空间的转换示意图: 页面空间到设备空间的转换需要两个矩形的宽高比(转换因子). 设备空间到物理空间转换的唯一作用是平移,并由Wi ...
- Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ssm]]
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].Standard ...
- 超強的Linux指令解釋網站《explainshell.com》,學Linux必備!
ExplainShell 官方網站:http://explainshell.com/ 原始碼下載:https://github.com/idank/explainshell 用瀏覽器打該explain ...
- LOJ6682 梦中的数论
题目 不难发现我们要求的东西是\(\sum_{i=1}^n\binom{\sigma(i)}{2}=\sum_{i=1}^n\frac{\sigma(i)(\sigma(i)-1)}{2}=\frac ...
- 使用VS 2019发布.net core程序并部署到IIS的最新教程
不管你是使用.net core开发的是web api还是网站类的程序,如果你是部署到IIS,那么下面的内容都适合于你,不会将.net core程序部署到IIS的朋友,可以看看这篇手把手教你部署.net ...
- Ubuntu 16.04 修改状态栏位置
修改状态栏位置: gsettings set com.canonical.Unity.Launcher launcher-position Bottom #底部(苹果风格) gsettings set ...
- brew install ''package卡在Updating Homebrew
关闭自动更新: export HOMEBREW_NO_AUTO_UPDATE=true
- 转帖 移动端h5页面不同尺寸屏幕适配兼容方法
1. viewport属性及html页面结构 <meta name="viewport" content="width=device-width,initial ...
- @ResponseEntity返回值(怪异)
定制相应头 /** * 将返回数据放在响应体中 * * ResponseEntity<String>:响应体中内容的类型 * @return */ //@ResponseBody @Req ...