Django自带的用户认证 :

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

Django作为一个完美主义的终极框架, 当然也内置了强大的用户认证系统(auth), 它默认使用auth_user表来存储用户数据.


auth模块 :

导入auth :

from django.contrib import auth

auth中提供了许多使用方法 :

authenticate :

提供用户认证功能, 即验证用户名以及密码是否正确, 一般需要username, password两个关键字参数. 如果认证成功(用户名和密码正确有效), 便会返回一个User对象.

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

user = auth.authenticate(request, username="xxx", password="xxx")

login(HttpRequest, user) :

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

该函数实现一个用户登录的功能. 它本质上会在后端为该用户生成相关session数据.

from django.contrib.auth import authenticate, logindef my_view(request):username = request.POST['username']password = request.POST['password']user = authenticate(request, 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) :

该函数接受一个HttpRequest对象, 无返回值.

当调用该函数时, 当前请求的session信息会全部清除. 该用户即使没有登录, 使用该函数也不会报错.

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

is_authenticated() :

用来判断当前请求是否通过了认证.

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

login_requierd() :

auth给我们提供一个装饰器工具, 用来快捷的给某个视图添加登录校验.

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

若用户没有登录, 则会跳转到dajngo默认的登录 URL"/accounts/login/" 并传递当前访问url的绝对路径(登录成功后, 会重定向到该路径).

如果需要自定义登录的URL, 需要自settings,py文件中通过LOGIN_URL进行修改:

LOGIN_URL = "/login/"   # 配置自己项目想要跳转的路由

create_user() :

auth 提供的一个创建新用户的方法, 需要提供必要参数(username, password)等.

from django.contrib.auth.models import User
user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...)

create_superuser() :

auth提供的一个而创建新的超级用户的方法, 需要提供必要参数(username, password)等.

from django.contrib.auth.models import User
user = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)

check_password(password) :

auth提供的一个检查密码是否正确的方法, 需要提供当前请求用户的密码.

密码正确返回True, 否则返回False.

ok = user.check_password('原密码')

set_password(password) :

auth提供的一个修改密码的方法, 接收要设置的新密码作为参数.

注意 : 设置完要对调用用户对象的save()方法!!

user.set_password("新密码")
user.save()

User对象的属性 :

User对象属性: username, password

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

is_active: 是否允许用户登录, 设置为False, 可以在不删除用户的前提下禁止用户登录.


扩展默认的auth_user表 :

可以通过继承内置的AbstractUser类, 来定义自己的Model类.

这样既能根据项目需求灵活设计用户表, 又能使用Django强大的认证系统.

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):"""用户信息表"""nid = models.AutoField(primary_key=True)phone = models.CharField(max_length=11, null=True, unique=True)def __str__(self):return self.username

注意 : 按照上面的方式扩展了内置的auth_user表之后, 一定要在settings.py中告诉Django, 现在使用新定义的UserInfo来做用户认证. 写法如下 :

# 引用Django自带的User表,继承使用时需要设置
AUTH_USER_MODEL = "app名.UserInfo"

注意+1 : 一旦指定了新的认证系统所使用的表, 我们就需要重新再数据库中创建新表, 而不能继续使用原来默认的auth_user表了.

转载于:https://www.cnblogs.com/dong-/p/9811427.html

Django的认证系统(auth)相关推荐

  1. 【Django】认证系统

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

  2. django用户认证系统——拓展 User 模型2

    Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...

  3. Django 【认证系统】auth

    本篇内容 介绍Django框架提供的auth 认证系统 方法: 方法名 备注 create_user 创建用户 authenticate 登录验证 login 记录登录状态 logout 退出用户登录 ...

  4. django用户认证系统——登录4

    用户已经能够在我们的网站注册了,注册就是为了登录,接下来我们为用户提供登录功能.和注册不同的是,Django 已经为我们写好了登录功能的全部代码,我们不必像之前处理注册流程那样费劲了.只需几分钟的简单 ...

  5. Django的自带认证系统——auth模块

    Django自带的用户认证 auth模块 from django.contrib import auth 备注:使用auth模块时,我们默认使用Django提供的auth_user表,创建数据时,可以 ...

  6. django用户认证系统——注册3

    用户注册就是创建用户对象,将用户的个人信息保存到数据库里.回顾一下 Django 的 MVT 经典开发流程,对用户注册功能来说,首先创建用户模型(M),这一步我们已经完成了.编写注册视图函数(V),并 ...

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

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

  8. Django的身份认证系统

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

  9. Django博客系统(用户中心展示)

    1. 页面展示 1.在users.views.py文件中定义视图 from django.views import Viewclass UserCenterView(View):def get(sel ...

最新文章

  1. 04_SpringCloud 整合Ribbon细粒度配置自定义
  2. oracle rollup分组没有数据时为0_数据库周刊19│GBASE适配鲲鹏;MySQL窗口函数;OGG双向数据同步……...
  3. Docker镜像下载到本地及恢复
  4. LOGO与BASIC语言编程入门pdf
  5. 【日常】关于爬虫中iframe节点处理小结(以超星课件下载为例)
  6. regedit是什么意思_regedit用法_regedit参数_reg的注册与反注册
  7. html目录链接怎么做,word目录超链接怎么做
  8. 【PHP插件】Easypanel,PHP各版本For linux版 (集成zend和ioncube)
  9. 一分钟让你知道Hadoop是什么
  10. “做真实的自己”是个坑
  11. 了解DNS劫持及dns劫持修复方法
  12. Stacked Attention Networks for Image Question Answering(用于图像问答的堆叠注意力网络)
  13. HTTP基本使用方法
  14. 以鸿蒙为景柱1009无标题,鸿蒙的意思
  15. Chimaera:用区块链游戏思维将《玩家一号》的“绿洲”变为现实;网易有道将推语音助手及智能音箱
  16. 叮咚DsV1.0pj版(去授权)
  17. 【CS231n 课程笔记】第八讲-----常见的深度学习框架,以及GPU和CPU介绍。
  18. 武汉 华为 android,【武汉华为手机大全】武汉华为手机报价及图片大全-列表版-ZOL中关村在线...
  19. 编程之美 - 读书笔记 - 烙饼问题与搜索树
  20. 解决linux联网却不能看视频问题

热门文章

  1. 你需掌握的CSS知识都在这了(长文建议收藏,文末有福利)
  2. web前端是不是没有前景了?
  3. 有人说,30岁是程序员的一个末日期,写给30岁的程序员,到底该怎么做呢
  4. C语言分支语句和循环语句及练习
  5. 新rust怎么拆除围墙_“问题围挡”拆除 街道变漂亮了
  6. c语言指针生成numpy数组,python – 在cython中声明numpy数组和c指针
  7. NYOJ-邮票分你一半(dp)
  8. 【Deep Learning 五】课程二(mproving Deep Neural Networks),第一周(Setting up your Machine Learning Applicat)答案
  9. 2019计算机视觉领域顶级会议时间表
  10. Fescar TC-beigin流程