Auth模块使用方法大全
auth认证
导包
from django.contrib import auth
默认数据库中使用auth_user表
创建超级用户
python manage.py createsuperuser
验证登陆
auth.authenticate(request,username,password)
校验用户密码和账号,通过返回具体的用户对象
添加session,标识已登陆
auth.login(request,user)
接受request和前面通过登陆验证的user对象,将session key保存在浏览器,数据保存在django_session表中。
登陆验证装饰器
用来装饰需要登陆后给浏览器添加session后才能访问的视图添加检测,如果有session则放行,否则跳转指定页面,通常我们设置成登陆页面。
#导入auth 登陆装饰器
from django.contrib.auth.decorators import login_required
#在需要登陆后才能访问的页面视图前面添加装饰器
@login_required
def index():
pass
这样浏览器在访问index页面时,会先检查是否有session,如果没有,则跳转默认页面,并将原访问页面作为get参数放在跳转页面中,在登陆成功后会跳转之前要访问的页面
http://127.0.0.1:8000/accounts/login/?next=/index/
# 例如我要访问index页面,但是我没session,
# 这时装饰器会默认跳转到/accounts/login/页面,
# 并将index页面的url以next参数的形式包含在其中
#,这样在你登陆后,还能返回原页面
可以在django的settings中修改装饰器默认跳转的Url
#配置auth认证登陆装饰器的默认跳转地址
LOGIN_URL = '/login/'
注销方法
auth.logout(request)
接受一个request,清除当前request中的session并在数据表中django_session数据也会被清除。
常用方法,搭配一个视图使用:
def logout(request):
auth.logout(request)
return redirect('/login/')
例如在页面上使用a标签和button按钮点击跳转注销视图,注销后跳回登陆页面
request.user属性
auth组件的中间间中做了这样一个事情,当request请求来时,判断是否有session,如果有session则会根据session去django_session中找出相应的用户的信息,并赋值给request.user属性,也就是request.user=user是一个User数据对象,否则返回一个匿名的对象给request.user,该对象调用所有的方法都返回None
def index(request):
print(request.user)
# 是一个懒加载数据对象
这时我们可以把request.user当作一个普通的orm中的数据对象
is_authenticated
判断用户对象是否通过了校验
request.user.is_authenticated
# 返回一个布尔值
实例
from django.shortcuts import render,HttpResponse,redirect
from django.contrib import auth
from django.contrib.auth.decorators import login_required
# Create your views here.
def login(request):
if request.method=='POST':
username = request.POST.get('username')
pwd = request.POST.get('password')
print(username,pwd)
#利用auth验证用户名和密码是否正确验证成功实例化一个数据对象否则返回none
user = auth.authenticate(request,username=username,password=pwd)
if user:
#登录成功后,给登录用户在request中增加session,存在数据库
auth.login(request,user)
return redirect('/index/')
else:
msg = '错误'
print('用户名错误')
return redirect('/index/')
return render(request,'login.html')
def logout(request):
auth.logout(request)
return redirect('/login/')
@login_required()
def index(request):
print(request.session.__dir__)
print(request.user.password)
return render(request,'Index.html')
auth中user表的使用
因为auth中的用户表存的密码是密文形式,所以不能直接使用orm中creat语句
#导入user表
from django.contrib.auth.models import User
def register(request):
form_objs = UserInfoForm()
if request.method=='POST':
form_objs= UserInfoForm(request.POST)
if form_objs.is_valid():
username = form_objs.cleaned_data['name']
password = form_objs.cleaned_data['pwd']
#只能使用auth表的create_user方法去创建用户
User.objects.create_user(username=username,password=password)
return redirect('/login/')
return render(request,'register.html',locals())
创建超级用户的方法和上面一样,只不过变成User.objects.create_superuser
校验密码和设置密码
在用户登陆成功后通常需要验证密码和修改密码,auth组件也提供了相应的方法
# user为User表具体的对象,接受一个密码,返回布尔值
user.check_password(password)
# user为User表具体的对象,接受一个密码,修改原密码,一定要记得save()保存
user.set_password(password)
user.save()
扩展auth_user自定义表
1. 建表继承AbstractUser
from django.db import models
# Create your models here.
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
#编写扩展字段,然后去settings告诉django auth组件会用这张表
phone =models.CharField(max_length=11)
2. 在django配置指定
AUTH_USER_MODEL = app01.UserInfo
#格式:app名称.表名
总结
auth认证
默认Django内置的认证系统, 默认在数据库中使用auth_user
from django.contrib import auth
1. 创建一个超级用户
python manage.py createsuperuser
2. 验证用户名和密码是否正确
user = auth.authenticate(request, username, password)
3. 登录
auth.login(request, user) --> user是上一步的得到的user对象
4. 注销
auth.logout(request) --> 将当前请求的session数据删除
5. 登录认证的装饰器
auth.decorators.login_required
默认跳转的登录url: /accounts/login/
在settings.py中 配置 LOGIN_URL = "你的登录url"
6. is_authenticated()
判断当前request.user是否经过认证,经过认证就返回True,否则是False
7. AuthenticationMiddleware中间件究竟做了什么?
request.user = user, 匿名用户对象
auth_user表的方法
8. create_user()
创建用户,不同与普通orm目的是使密码加密保存
9. create_superuser()
创建超级用户
10. check_password()
检查密码
11. set_password()
设置密码
使用流程:
- 登陆时校验用户密码 auth.authenticate(username,password)生成user对象
- 给通过校验的user对象添加session, auth.login(request,user)
- 添加session成功后,后续的请求,request.user=user对象,可拿到数据库数据
- 注销,auth.logout(request),将浏览器保存的sessionkey清除掉
- user表的创建用户,不同于普通orm操作,因为密码需要加密保存,User.objects.create_user(), User.objects.create_superuser().
- user对象的方法:user.check_password(password),user.set_password(passord)
- 判断用户是否通过校验,request.user.is_authenticated(),返回一个布尔值(不常用)
Auth模块使用方法大全的更多相关文章
- Django之auth模块(用户认证)
auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象, 而有了auth模块之后就可以很轻松的去验证用户的 ...
- Django自带的用户认证auth模块
一.介绍 基本上在任何网站上,都无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能. 使用Django,我们可以不需要自己写这些功能,因为Dj ...
- 十一、Django认证模块--Auth模块
一.常规认证方法 我们学生管理之登录实现一文中已经了解了自己写一个登录逻辑的过程: 1.url配置 urlpatterns = [ url(r'^login/$', views.login), url ...
- Django之auth模块(用户认证)登陆组件
auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象, 而有了auth模块之后就可以很轻松的去验证用户的 ...
- 用户认证系统 django.contrib.auth模块
一 导入auth模块 from django.contrib.auth.models import User from django.contrib import auth auth模块的操作针对的就 ...
- Django-中间件-csrf扩展请求伪造拦截中间件-Django Auth模块使用-效仿 django 中间件配置实现功能插拔式效果-09
目录 昨日补充:将自己写的 login_auth 装饰装在 CBV 上 django 中间件 django 请求生命周期 ***** 默认中间件及其大概方法组成 中间件的执行顺序 自定义中间件探究不同 ...
- Django—auth模块
auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象, 而有了auth模块之后就可以很轻松的去验证用户的 ...
- 跨站请求伪造(csrf),django的settings源码剖析,django的auth模块
目录 一.跨站请求伪造(csrf) 1. 什么是csrf 2. 钓鱼网站原理 3. 如何解决csrf (1)思路: (2)实现方法 (3)实现的具体代码 3. csrf相关的装饰器 (1)csrf_p ...
- Django Auth模块及User对象方法
一:Django的用户认证 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1:authenticat ...
随机推荐
- 内联函数:static inline 和 extern inline 的含义
引入内联函数的目的是为了解决程序中函数调用的效率问题. 函数是一种更高级的抽象.它的引入使得编程者只关心函数的功能和使用方法,而不必关心函数功能的具体实现:函数的引入可以减少程序的目标代码,实现程序代 ...
- 讲一个关于paxos的故事...
先讲一个故事. 从前,在国王Leslie Lamport的统治下,有个黑暗的希腊城邦叫paxos.城邦里有3类人, 决策者 提议者 群众 虽然这是一个黑暗的城邦但是很民主,按照议会民主制的政治模式制订 ...
- 使用PHPExcel将数据导出至Excel
安装类库 从GitHub上下载PHPExcel类库 地址:https://github.com/PHPOffice/PHPExcel 解压后将Classes文件夹移动到ThinkPHP的extend目 ...
- [C# ASP.NET]如何让IIS Express支持外部(局域网)连接
声明:本文为www.cnc6.cn原创,转载时请注明出处,谢谢! 一.搭建环境: 1.系统:Win10 1809 2.IDE:Visual Studio 2017 3.Framework: 4.6.1 ...
- 【开源】Skatch 正式发布 - 极速渲染抽象派草图
极速渲染抽象派草图 DEMO Simple Letter 简介 Skatch 这个词由 sketch wechart abstract cax 混合而成的一个新词,代表了cax wechart 抽象艺 ...
- C#代码中插入X86汇编
这两天在看C# SIMD相关的东西, 在爆栈上面搜到一段代码, 表示很震惊, 还是得贴出来… [UnmanagedFunctionPointer(CallingConvention.StdCall)] ...
- 【转】redis-cluster安装配置
需要三台虚拟机(生产环境是3个物理机),分配静态IP.cluster中共6个节点.3主3从.本文中每个虚拟机上的redis端口:6379 6380. 需要注意的两点: 3个主节点分别位于3台虚拟机上, ...
- MySQL分页时统计总记录行数并使用limit返回固定数目的记录
需求很简单:假设有一个user表,表中实际上有10000条数据,但是我不知道有多少条,我要从数据库中每次取20条数据显示,那么怎么完成呢? 方案一: 首先执行一个 select count(*) as ...
- oracle服务端安装与配置
从oracle官网下载oracle服务端的安装包. 下载下来是两个压缩文件,两个压缩文件都解压(缺一不可)到同一目录下,最后会得到一个database文件夹. 双击database文件夹下的setup ...
- Angular ngRepea
<!DOCTYPE html><html ng-app><head lang="en"> <meta charset="UTF- ...