Django自带的用户认证

auth模块

from django.contrib import auth

备注:使用auth模块时,我们默认使用Django提供的auth_user表,创建数据时,可以使用命令行来创建超级用户:

命令行:在项目的根目录下输入:python manage.py createsuperuser   回车提示输入用户名:输入用户名后,回车,输入邮箱地址,可以不填,继续回车,输入密码:输入密码时,密码必须是数字和字母组成,并且不能少于八位,否则会报错,其他的信息可以不填。

django.contrib.auth中提供了许多方法,这里主要介绍其中的三个:

authenticate()   

提供了用户认证,即验证用户名以及密码是否正确,一般需要username  password两个关键字参数

如果认证信息有效,会返回一个  User  对象。authenticate()会在User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。

当我们试图登陆一个从数据库中直接取出来不经过authenticate()的User对象时会报错!!!

user = authenticate(username='theuser',password='thepassword')

login(HttpRequest, user)  

该函数接受一个HttpRequest对象,以及一个认证了的User对象

备注:auth.login方法将校验通过的用户封装到request中,这样在request的生命周期我们都可以使用request.user得到这个用户的对象,不管是在视图函数还是在模板语言中都可以使用request.user 然后在  .字段属性  来取到需要的内容。

此函数使用django的session框架给某个已认证的用户附加上session id等信息。

from django.contrib.auth import authenticate, logindef my_view(request):username = request.POST['username'] password = request.POST['password'] user = authenticate(username=username, password=password) if user is not None: login(request, user) # Redirect to a success page.  ... else: # Return an 'invalid login' error message. ...

logout(request) 注销用户 

from django.contrib.auth import logoutdef logout_view(request):logout(request)# Redirect to a success page.

该函数接受一个HttpRequest对象,无返回值。当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。

  备注:注销用户后,直接访问这个路径,还可以登录,但是我们可以print(request.user),当用户通过校验登录时,得到的是一个具体的用户对象,当注销时,再次访问时,就会输出AnonymousUser(是一个类 <class 'django.utils.functional.SimpleLazyObject'>),意为匿名用户,可以通过这个处理一些判断。

user对象的 is_authenticated()

要求:

1  用户登陆后才能访问某些页面,

2  如果用户没有登录就访问该页面的话直接跳到登录页面

3  用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址

方法1:

def my_view(request):if not request.user.is_authenticated():return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

方法2:

django已经为我们设计好了一个用于此种情况的装饰器:login_required()

from django.contrib.auth.decorators import login_required@login_required
def my_view(request):...

若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' (这个值可以在settings.py文件中通过LOGIN_URL进行修改)。并传递  当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。

User对象

User 对象属性:username, password(必填项)password用哈希算法保存到数据库

is_staff : 用户是否拥有网站的管理权限.

is_active : 是否允许用户登录, 设置为``False``,可以不用删除用户来禁止 用户登录

is_authenticated()

如果是真正的 User 对象,返回值恒为 True 。 用于检查用户是否已经通过了认证。
通过认证并不意味着用户拥有任何权限,这个方法甚至也不检查该用户是否处于激活状态,只是表明用户成功的通过了认证。

这个方法很重要, 在后台用request.user.is_authenticated()判断用户是否已经登录,如果true则可以向前台展示request.user.name

创建用户

使用 create_user 辅助函数创建用户:

from django.contrib.auth.models import User  #代表数据库中Django自带创建的auth_user这张表user = User.objects.create_superuser(username='',password='')   #这是创建超级用户的方法(备注:密码有限制)
user = User.objects.create_user(username='',password='',email='') #这个是创建普通用户的方法

check_password(passwd)

用户需要修改密码的时候,首先要让其输入原来的密码 ,如果给定的值通过了密码检查,返回 True

备注:用户修改密码时,肯定是已经登录的状态,所以,此时,校验密码时,我们可以取得用户输入的原密码,通过这个user_obj ,我们可以直接user_obj.check_password(原密码)来得到一个校验的结果True或False。然后根据这个状态我们在进行下一步的操作,即修改密码。在使用这个对象 .set_password(新密码=‘XX’),值得注意的时,修改完密码后,一定要保存  .save() 方法。

修改密码

使用 set_password() 来修改密码

user = User.objects.get(username='')
user.set_password(password='')
user.save()

字段的扩展

  我们在使用Django自带的auth_user表时,他提供的字段是有限的,我们如果有其他的字段需求,就需要扩展这张表。

  方式有两种:

  一,使用ORM中OneToOne进行关联,创建一张表,关联这张auth_user 这张表。

#app下的models.py中#导入这张Django内置的表
from django.contrib.auth.models import Userclass UserDetail(models.Model):mobile = models.CharFiled(max_length=11)user = models.OneToOneFiled(to=User)   #切记,此处的User不需要加“”双引号,因为User是从其他文件中导入的,            这个User这是代指这张表。加引号的话,系统会从当前加载的整个py文件中反射的去找。显然找不到。

  二,继承的方式 (推荐使用这种用法)

from django.contrib.auth.models import AbstractUserclass UserInfo(AbstractUser):mobile = models.CharFiled(max_length=11)

备注:使用继承的方式创建新表时,相当于我们对内置的auth_user表进行了覆盖,这是我们要在settings.py文件中指定一个参数:AUTH_USER_MODEL = "APP的名字.继承AbstractUser的类的类名"  ,来告诉Django默认用户认证时使用哪张表。

使用继承的方式代替auth_user 表,我们任然可以使用所有的auth方法,创建用户时,变成 models.UserInfo.objects.create_user()这个用法了。

简单示例

def sign_up(request):state = Noneif request.method == 'POST':password = request.POST.get('password', '')repeat_password = request.POST.get('repeat_password', '')email=request.POST.get('email', '')username = request.POST.get('username', '')if User.objects.filter(username=username):state = 'user_exist'else:new_user = User.objects.create_user(username=username, password=password,email=email)new_user.save()return redirect('/book/')content = {'state': state,'user': None,}return render(request, 'sign_up.html', content) 

注册示例代码

@login_required
def set_password(request):user = request.userstate = Noneif request.method == 'POST':old_password = request.POST.get('old_password', '')new_password = request.POST.get('new_password', '')repeat_password = request.POST.get('repeat_password', '')if user.check_password(old_password):if not new_password:state = 'empty'elif new_password != repeat_password:state = 'repeat_error'else:user.set_password(new_password)user.save()return redirect("/log_in/")else:state = 'password_error'content = {'user': user,'state': state,}return render(request, 'set_password.html', content)

修改密码示例

转载于:https://www.cnblogs.com/zhaopanpan/p/9067772.html

Django的自带认证系统——auth模块相关推荐

  1. django python3会员中心_python3开发进阶-Django框架的自带认证功能auth模块和User对象的基本操作...

    阅读目录 一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: authenticate( ...

  2. Dango 之认证组件Auth模块

    Django 默认已经提供了认证系统 Auth模块.认证系统包含: 用户管理 权限[PBAC] 用户组 密码哈希系统 用户登录或内容显示的表单和视图 一个可拔插的后台系统 1.Auth模块 from ...

  3. Django的认证系统(auth)

    Django自带的用户认证 : 在开发一个网站时, 无可避免的需要设计实现网站的用户系统. 此时我们需要实现包括用户注册, 用户登录, 用户认证, 注销, 修改密码等功能. Django作为一个完美主 ...

  4. 43.Django权限系统auth模块详解

    昨天我们为了登录admin,通过命令创建了超级用户,你是不是有个疑问--这创建的超级用户的信息是存放在哪里了呢?   这就想到了我们映射数据库时,Django自动创建的一些表(这也是之前进行数据库迁移 ...

  5. 双因子认证系统登录模块

    双因子认证系统登录模块 实现原理: 一.用户需要开启Google Authenticator服务时,1.服务器随机生成一个类似于『DPI45HKISEXU6HG7』的密钥,并且把这个密钥保存在数据库中 ...

  6. Django权限系统auth模块详解

    转自:原文出处 auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和admin模块配合使用, 快速建立网站的管理系统. 在INSTALLED_A ...

  7. 【Django】认证系统

    目录 #. auth模块 1. 认证 authenticate() 2. 登陆 login(HttpRequest, user) 3. 注销 logout(request) 4. 认证判断 is_au ...

  8. django xadmin 默认密码_Django的认证系统

    点击上方 "Python Web与Django大咖之路"关注我! Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用 ...

  9. Django的身份认证系统

    1 . 在Django中使用身份认证系统 Django的身份认证系统实际上是一个app,该app叫做django.contrib.auth,它在django contrib模块下 使用时只需要在set ...

最新文章

  1. QIIME 2教程. 04人体微生物组分析Moving Pictures(2020.11)
  2. 分布式事务之消息补偿解决方案
  3. 单月营收超 12 亿元,叮咚买菜如何携手神策数据造就增长神话?
  4. 云计算技术背后的那些天才程序员:KVM之父Avi Kivity
  5. 牛客16662 津津的储蓄计划
  6. 狼奔代码生成器使用说明
  7. 音视频开发(26)---H.264编码格式和视频编码的一些基本概念
  8. Linux第六次学习笔记
  9. C++11中shared_ptr智能指针用法
  10. sublime 添加 ConvertToUTF-8
  11. 《老友记》典故集解 Season 1-10
  12. 全局快门与卷帘式快门
  13. 机器学习教程之朴素贝叶斯、贝叶斯信念网络
  14. 关于Win11家庭版安装Ansys2021R1遇到的问题
  15. WIN32,GetBitmapBits与GetPixel
  16. vue.js bootstrap 下拉列表_Excel下拉菜单制作的小技巧
  17. Android之获取移动网络ip
  18. git 忽视修改过的文件
  19. ansible如何批量杀死nohup执行的脚本进程
  20. 用matlab生成RGB三色的散点图

热门文章

  1. SAP UI5框架绘制footer区域的入口调试
  2. SAP CRM WebClient UI点了产品主数据搜索结果超链接后的跳转调试
  3. 如何处理VMware启动虚拟机时的错误信息Failed to lock the file
  4. ajax请求是宏任务还是微任务_微服务-如何解决链路追踪问题
  5. 北京林业大c语言程序设计考试试题,2020年南京林业大学2017考研真题考研真题试卷及试题答案,C程序设计考研试题下载...
  6. java bean 单例模式_单例模式 - Beans_bag - 博客园
  7. 一个大型虚拟项目包含位于不同地点的许多干系人_项目管理与人生
  8. mysql 浮点数 字节_数据库学习笔记之MySQL(02)
  9. 地理信息系统论坛_高端论坛西南交通大学朱庆教授:应急测绘智能服务关键技术及重大应用...
  10. html状态查询爱站,批量获取爱站数据