前言

本文主要给大家介绍了关于Django中内置用户认证的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
认证登陆
在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中;
如果用户存在于数据库中,然后再验证用户输入的密码,这样一来就要自己编写大量的代码。
事实上,Django已经提供了内置的用户认证功能。
在使用"python manage.py makemigrationss"和"python manage.py migrate"迁移完成数据库之后
根据配置文件settings.py中的数据库段生成的数据表中已经包含了6张进行认证的数据表,分别是
进行用户认证的数据表为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用哈希算法保存到数据库中
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基于存储在前端的token用户认证解析
# Django用户认证系统 组与权限解析
# Django用户认证系统 Web请求中的认证解析
# Django用户认证系统 User对象解析
# django rest framework 实现用户登录认证详解
# Django 权限认证(根据不同的用户
# 设置不同的显示和访问权限)
# 利用Django内置的认证视图实现用户密码重置功能详解
# Django自带用户认证系统使用方法解析
# 用户登陆
# 默认为
# 数据库中
# 修改密码
# 空字符串
# 为空
# 新密码
# 跳转到
# 两次
# 报错
# 方法来
# 返回值
# 也不
# 通过了
# 相关内容
# 说了
# 不多
# 会在
# 有一定
# 给大家
相关文章:
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
建站之星如何修改网站生成路径?
香港服务器如何优化才能显著提升网站加载速度?
建站之星备案是否影响网站上线时间?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
网站制作说明怎么写,简述网页设计的流程并说明原因?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
如何选择建站程序?包含哪些必备功能与类型?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
如何快速生成ASP一键建站模板并优化安全性?
网站制作公司排行榜,四大门户网站排名?
建站VPS推荐:2025年高性能服务器配置指南
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
如何在万网ECS上快速搭建专属网站?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
如何高效生成建站之星成品网站源码?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
如何快速登录WAP自助建站平台?
如何通过智能用户系统一键生成高效建站方案?
Android滚轮选择时间控件使用详解
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
公司网站的制作公司,企业网站制作基本流程有哪些?
高端建站三要素:定制模板、企业官网与响应式设计优化
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
ppt制作免费网站有哪些,ppt模板免费下载网站?
如何在IIS中新建站点并解决端口绑定冲突?
魔方云NAT建站如何实现端口转发?
广德云建站网站建设方案与建站流程优化指南
如何快速生成可下载的建站源码工具?
如何在云主机快速搭建网站站点?
建站三合一如何选?哪家性价比更高?
如何在香港服务器上快速搭建免备案网站?
网站制作服务平台,有什么网站可以发布本地服务信息?
用v-html解决Vue.js渲染中html标签不被解析的问题
平台云上自主建站:模板化设计与智能工具打造高效网站
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
焦点电影公司作品,电影焦点结局是什么?
建站之星如何开启自定义404页面避免用户流失?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
如何设计高效校园网站?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
如何在建站主机中优化服务器配置?
建站之星如何取消后台验证码生成?
如何做静态网页,sublimetext3.0制作静态网页?
jQuery 常见小例汇总
如何通过NAT技术实现内网高效建站?
*请认真填写需求信息,我们会在24小时内与您取得联系。