Django内置的用户认证
认证登陆
在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中;
如果用户存在于数据库中,然后再验证用户输入的密码,这样一来就要自己编写大量的代码。
事实上,Django已经提供了内置的用户认证功能。
在使用"python manage.py makemigrationss"
和"python manage.py migrate"
迁移完成数据库之后
根据配置文件settings.py
中的数据库段生成的数据表中已经包含了6张进行认证的数据表,分别是
- auth_user
- auth_group
- auth_group_permissions
- auth_permission
- auth_user_groups
- auth_user_user_permissions
进行用户认证的数据表为auth_user
要使用Django自带的认证功能,首先要导入auth
模块
from django.contrib import auth #导入auth模块
django.contrib.auth
中提供了很多方法,我们常用的有三个方法:
authenticate()
提供了用户认证,即验证用户名以及密码是否正确,一般需要username和password两个关键字参数
如果通过认证,authenticate()
函数会返回一个User对象。
authenticate()
函数会在User对象上设置一个属性标识,这个属性标识经过数据库验证用户名及密码。
当我们试图登陆一个从数据库中直接取出来不经过authenticate()
的User对象时会报错。
使用:
user=authenticate(username="uaername",password="password")
login(HttpResponse,user)
这个函数接受一个HttpRequest
对象,以及一个通过authenticate()
函数认证的User对象
login(request)登陆用户
这个函数使用Django
的session
框架给某个已认证的用户附加上session_id
信息。
使用:
from django.shortcuts import render,redirect,HttpResponse
from django.contrib.auth import authenticate,login
def auth_view(request):
username=request.POST.GET("usernmae") # 获取用户名
password=request.POST.GET("password") # 获取用户的密码
user=authenticate(username=username,password=password) # 验证用户名和密码,返回用户对象
if user: # 如果用户对象存在
login(request,user) # 用户登陆
return redirect("/index/")
else:
return HttpResponse("用户名或密码错误")
logout(request)注销用户
这个函数接受一个HttpResponse
对象,无返回值。
当调用该函数时,当前请求的session信息全部被清除。
即使当前用户没有登陆,调用该函数也不会报错。
使用:
from django.shortcuts import render,redirect,HttpResponse
from django.contrib.auth import authenticate,login,logout
def logout_view(request):
logout(request) # 注销用户
return redirect("/index/")
user对象的is_authenticated()
要求:
- 用户登陆后才能访问某些页面
- 如果用户没有登陆就访问本应登陆才能访问的页面时会直接跳转到登陆页面
- 用户在登陆页面登陆后,又会自动跳转到之前访问的页面
方法一:
def view1(request):
if not request.user.is_authenticated():
return redirect("/login/")
方法二:
使用Django的login_requierd()
装饰器
使用:
from django.contrib.auth.decorators import login_required
@login_required
def views(request):
pass
如果用户没有登陆,则会跳转到Django默认的登陆URL的"/accountss/login/"
login视图函数可以在settings.py文件中通过LOGIN_URL修改默认值
用户登陆成功后,会重定向到原来的路径。
user对象
User对象属性:username,password为必填项
password用哈希算法保存到数据库中
- is_staff:判断用户是否拥有网站的管理权限
- is_active:判断是否允许用户登陆,设置为“False”时可以不用删除用户来禁止用户登陆
User对象的方法
is_authenticated()
如果是通过auth
函数返回的真实的User对象,返回值则为True。这个方法检查用户是否已经通过了认证。
is_authenticated()
函数的返回值为True时,表明用户成功的通过了认证。
创建用户
使用create_user
辅助函数创建用户
from django.contrib.auth.models import User
user=User.objects.create_user(username="username",password="password")
set_password(password)
使用这个方法来修改密码
使用:
from django.contrib.auth.models import User
user=User.objects.get(username="username") # 获取用户对象
user.set_password(password="password") # 设置对象的密码
user.save()
check_password(password)
用户想修改密码的时候,首先要让用户输入原来的密码。
如果用户输入的旧密码通过密码验证,返回True。
例子一,使用set_password()
方法来修改密码
from django.shortcuts import render,redirect,HttpResponse
from django.contrib.auth.models import User
def create_user(request):
msg=None
if request.method=="POST":
username=request.POST.get("username"," ") # 获取用户名,默认为空字符串
password=request.POST.get("password"," ") # 获取密码,默认为空字符串
confirm=request.POST.get("confirm_password"," ") # 获取确认密码,默认为空字符串
if password == "" or confirm=="" or username=="": # 如果用户名,密码或确认密码为空
msg="用户名或密码不能为空"
elif password !=confirm: # 如果密码与确认密码不一致
msg="两次输入的密码不一致"
elif User.objects.filter(username=username): # 如果数据库中已经存在这个用户名
msg="该用户名已存在"
else:
new_user=User.objects.create_user(username=username,password=password) #创建新用户
new_user.save()
return redirect("/index/")
return render(request,"login.html",{"msg":msg})
例子二,使用login_required装饰器
来修改密码
from django.shortcuts import render,redirect,HttpResponse
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
@login_required
def change_passwd(request):
user=request.user # 获取用户名
msg=None
if request.method=='POST':
old_password=request.POST.get("old_password","") # 获取原来的密码,默认为空字符串
new_password=request.POST.get("new_password","") # 获取新密码,默认为空字符串
confirm=request.POST.get("confirm_password","") # 获取确认密码,默认为空字符串
if user.check_password(old_password): # 到数据库中验证旧密码通过
if new_password or confirm: # 新密码或确认密码为空
msg="新密码不能为空"
elif new_password != confirm: # 新密码与确认密码不一样
msg="两次密码不一致"
else:
user.set_password(new_password) # 修改密码
user.save()
return redirect("/index/")
else:
msg="旧密码输入错误"
return render(request,"change_passwd.html",{"msg":msg})
Django内置的用户认证的更多相关文章
- django内置的认证系统
Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...
- Django自带的用户认证auth模块
一.介绍 基本上在任何网站上,都无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能. 使用Django,我们可以不需要自己写这些功能,因为Dj ...
- (30)auth模块(django自带的用户认证模块)
Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的 ...
- Django内置权限扩展案例
当Django的内置权限无法满足需求的时候就自己扩展吧~ 背景介绍 overmind项目使用了Django内置的权限系统,Django内置权限系统基于model层做控制,新的model创建后会默认新建 ...
- Django之auth模块用户认证模块
一.Auth模块 1)auth模块是什么.登录后台使用的账号密码,则就是使用的auth模块创建的表 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站 ...
- Django自带的用户认证
1. 创建超级用户 python manage.py createsuperuser 2. 认证 校验用户名和密码 obj = auth.authenticate(request,user ...
- 6月29日学习总结 Django自带的用户认证
Django自带的用户认证 我们在开发一个网站的时候,无可避免的要设计.实现网站的用户系统.此时我们需要实现包括但不限于用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. D ...
- Django内置Admin
Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttyp ...
- Django内置分页
一.django内置分页 from django.shortcuts import render from django.core.paginator import Paginator, EmptyP ...
随机推荐
- EAGO科技人工智能+澳洲MSPL外汇平台招商
天下财经 首席运营商 EAGO外汇人工智能简介:我们将历史数据导入算法引擎,加入因子(外汇中使用的各种技术指标及各个国家的货币政策等)让计算机通过二元遗传基因.深度神经网络等算法,由机器自主深度学习. ...
- IO库
IO类 C++语言不直接处理出入输出,而是通过一族定义在标准库中的类型来处理IO.这些类型支持从设备读取数据.向设备写入数据的IO操作,设备可以是文件 .控制台窗口 等.还有一些类型允许内存IO ,即 ...
- 网上搜索到的 比较好的mysql查询语句练习题
Sutdent表的定义 字段名 字段描述 数据类型 主键 外键 非空 唯一 自增 Id 学号 INT(10) 是 否 是 是 是 Name 姓名 VARCHAR(20) 否 否 是 否 否 Sex 性 ...
- 使用Jmeter进行http接口测试 ---------成都杀手
前言: 本文主要针对http接口进行测试,使用Jmeter工具实现. Jmter工具设计之初是用于做性能测试的,它在实现对各种接口的调用方面已经做的比较成熟,因此,本次直接使用Jmeter工具来完成对 ...
- 网络协议UDP
------------------------------互联网协议与协议族------------------------------tcp/ip协议介绍:计算机网络协议,不同类型不同厂家之间的终 ...
- jQuery控制a标签不可点击 不跳转
jquery禁用a标签方法1 01 02 03 04 05 06 07 08 09 10 11 12 $(document).ready(function () { $("a ...
- Apache开启压缩功能
起源 在一般的web服务器中,都会开启压缩功能,也就是deflate或者是gzip的压缩. 开启压缩功能主要的目的是为了减少传输的带宽,从而当服务器响应给客户端的时候,会大大减少传输的数据,代价就是在 ...
- javascript中用setAttribute给元素添加colspan属性无效
先附上代码 var tr=document.createElement('TR'); var td=document.createElement('TD'); td.setAttribute('col ...
- BGP基础【第三部】
静态路由的优点:安全稳定.缺点:配置繁琐不灵活.动态路由的优缺点则反之. BGP边界网关路由协议 路径向量(rip是距离矢量) 到达目的网段所要经过的所有as BGP选路不看度量值而参考13种路径属性 ...
- 【Beta】阶段 第一次Daily Scrum Meeting
每日任务 1.本次会议为第一次 Meeting会议: 2.本次会议在周一下午16:40,课间休息时间在禹州楼召开,召开本次会议为10分钟. 一.今日站立式会议照片 二.每个人的工作 (有work it ...