全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

深入理解Django中内置的用户认证

前言

本文主要给大家介绍了关于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基于存储在前端的token用户认证解析  # Django用户认证系统 组与权限解析  # Django用户认证系统 Web请求中的认证解析  # Django用户认证系统 User对象解析  # django rest framework 实现用户登录认证详解  # Django 权限认证(根据不同的用户  # 设置不同的显示和访问权限)  # 利用Django内置的认证视图实现用户密码重置功能详解  # Django自带用户认证系统使用方法解析  # 用户登陆  # 默认为  # 数据库中  # 修改密码  # 空字符串  # 为空  # 新密码  # 跳转到  # 两次  # 报错  # 方法来  # 返回值  # 也不  # 通过了  # 相关内容  # 说了  # 不多  # 会在  # 有一定  # 给大家 


相关文章: 建站之星logo尺寸如何设置最合适?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  建站之星ASP如何实现CMS高效搭建与安全管理?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  如何快速配置高效服务器建站软件?  如何确保西部建站助手FTP传输的安全性?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  建站之星价格显示格式升级,你的预算足够吗?  C#怎么使用委托和事件 C# delegate与event编程方法  建站之星如何助力企业快速打造五合一网站?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  建站之星后台密码遗忘?如何快速找回?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  如何生成腾讯云建站专用兑换码?  无锡营销型网站制作公司,无锡网选车牌流程?  香港服务器租用每月最低只需15元?  建站之星如何取消后台验证码生成?  如何破解联通资金短缺导致的基站建设难题?  如何通过虚拟主机快速搭建个人网站?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  建站ABC备案流程中有哪些关键注意事项?  实现虚拟支付需哪些建站技术支撑?  如何确认建站备案号应放置的具体位置?  如何用免费手机建站系统零基础打造专业网站?  如何选择建站程序?包含哪些必备功能与类型?  c# 在高并发场景下,委托和接口调用的性能对比  存储型VPS适合搭建中小型网站吗?  如何配置WinSCP新建站点的密钥验证步骤?  如何快速生成凡客建站的专业级图册?  临沂网站制作公司有哪些,临沂第四中学官网?  如何通过主机屋免费建站教程十分钟搭建网站?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  如何配置FTP站点权限与安全设置?  如何选择适配移动端的WAP自助建站平台?  太平洋网站制作公司,网络用语太平洋是什么意思?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  如何制作算命网站,怎么注册算命网站?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  建站之星代理平台如何选择最佳方案?  三星网站视频制作教程下载,三星w23网页如何全屏?  Bpmn 2.0的XML文件怎么画流程图  如何用wdcp快速搭建高效网站?  如何快速生成高效建站系统源代码?  独立制作一个网站多少钱,建立网站需要花多少钱? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。