博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django ——auth认证
阅读量:5050 次
发布时间:2019-06-12

本文共 2809 字,大约阅读时间需要 9 分钟。

Auth 认证模块

1、什么是auth认证

Auth模块是Django自带的宇哥用户认证模块,里面包括:用户认证,用户登录,用户认证,注销,修改密码等功能。

它内置统一的认证体系--auth:它默认使用auth_user 表来存储用户数据

2、怎么用auth认证

from django.contrib import auth

2.1 authenticate()

  • 提供用户认证功能,及用户名和密码是否争取。需要username,password两个关键字参数

  • 如果认证成功,返回一个User对象
  • 如果认证成功,会在对象上设置一个标识来给后端,已经认证该用户,且后续认证过程是需要的
  • 用法

user = authenticate(username='usernamer',password='password')

2.2 login(HttpRequest,user)

  • 该函数接受一个HttpResponse对象,以及会经过认证的User对象
  • 该函数实现一个用户登录的功能,它的本质上会在后端生成相关的session

用法:

form django.contrib import authdef auth_login(request):    if request.method =='POST':        username = request.POST.get('username')        password = request.POST.get('password')        # 认证用户输入的用户名和密码是否正确        user_obj = auth.authenticate(username=username,password=password)        if user_obj:            # 记录用户的状态,一旦认证成功可以在任何地方通过request.user来获取当前的登录的用户            # request.senssion['name']='jasong'            auth.login(request,user_obj)  # 内部自动生成一个相关的session值,把用户信息放入到session中            return HttpResponse('login successfully')    return render(request,'auth_log.html')
  • 上面的登录功能的亮点
# 只要登录成功执行了 auth.login(request,user)# 之后再任何视图函数中都可以通过request.user 获取当前用户对象# 当没有执行auth.login, request.user打印出来的都是匿名用户# 如何判断用户是否通过auth.login登录?# request.auth.is_auth

2.3 logout(request)

def logout(request):    auth.logout(request)    return HttpResponse('ok')

2.4 装饰器校验是否登录成功及跳转

  • 局部装饰器
from django.contrib.auth.decorators import login_required@login_required(login_url='/auth_login/') # 局部配置def auth_home(request):    return HttpResponse('home必须登录才能访问')
  • 全局装饰器
# 在setting配置文件中指定auth登录不合法的统一跳转路径LOGING_URL = '/login/' # 既可以局部配置,也可以全局配置@login_requireddef auth_home(request):    return HttpRespionse('ok')

2.5 auth_user表添加数据

from django.contrib.auth.models import Userdef register(request):    User.objects.create() # 不能使用,这个产生的密码是名文    User.objects.createuser() # 创建普通用户    user.objects.createsuperuser() # 创建超级用户

2.6 校验密码、修改密码

def set_password(request):    old_password = request.POST.get(old_password)    new_password = request.POST.get(new_password)    # 校验输入的旧密码是否与现有密码一致    is_res = request.user.check_password(old_password)    if is_res:        # 修改密码为新密码        request.user.set_password('new_password')        # 下面的保存操作千万不能忘记        request.user.save()    return HttpResoponse('ok')

2.7 自定义模型表应用auth功能

  • 一对一关联

    from dajango.contrib.auth.model import Userclass UserDetail(models.Model):    phone = models.Charfield(max_length=11)  user = models.OneToOneField(to=User)
  • 面向对象继承

    from django.contrib.auth.models import User,AbstractUserclass UserInfo(abstractUser):  phone = models.Charfield(maxlength=32)# 需要在settings文件中指定不再使用auth_user表,而是使用我自己创建的user_infoAUTH_USER_MODEL = 'app名.models里面对应的模型表名'"""自定义认证系统默认使用的数据表之后,我们就可以像使用默认的auth_user表那样使用我们的UserInfo表了。库里面也没有auth_user表了,原来auth表的操作方法,现在全部用自定义的表均可实现"""

转载于:https://www.cnblogs.com/king-home/p/11061663.html

你可能感兴趣的文章
构建布局良好的Windows程序
查看>>
Android: 关于百度地图缩放级别
查看>>
MVC.Net: 解决Attempted to access an unloaded appdomain的问题
查看>>
oracle对操作系统文件的读写操作
查看>>
C++ 模板详解(一)
查看>>
基于matlab的蓝色车牌定位与识别---识别
查看>>
团队冲刺(二)个人工作总结3
查看>>
把list打成JSSON数组
查看>>
[leedcode 34] Search for a Range
查看>>
使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
查看>>
xamarin android 实现二维码带logo生成效果
查看>>
[物理学与PDEs]书中一些对数学研究有用的引理
查看>>
上海交通大学2007年数学分析考研试题
查看>>
[Everyday Mathematics]20150129
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]4.4.10
查看>>
陕西省第九次大学生高等数学竞赛复赛试题
查看>>
MyBATIS插件原理第一篇——技术基础(反射和JDK动态代理)(转)
查看>>
剑指Offer面试题:5.重建二叉树
查看>>
C - Woodcutters
查看>>
CF-845C
查看>>