Django的认证系统(auth)
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)相关推荐
- 【Django】认证系统
目录 #. auth模块 1. 认证 authenticate() 2. 登陆 login(HttpRequest, user) 3. 注销 logout(request) 4. 认证判断 is_au ...
- django用户认证系统——拓展 User 模型2
Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...
- Django 【认证系统】auth
本篇内容 介绍Django框架提供的auth 认证系统 方法: 方法名 备注 create_user 创建用户 authenticate 登录验证 login 记录登录状态 logout 退出用户登录 ...
- django用户认证系统——登录4
用户已经能够在我们的网站注册了,注册就是为了登录,接下来我们为用户提供登录功能.和注册不同的是,Django 已经为我们写好了登录功能的全部代码,我们不必像之前处理注册流程那样费劲了.只需几分钟的简单 ...
- Django的自带认证系统——auth模块
Django自带的用户认证 auth模块 from django.contrib import auth 备注:使用auth模块时,我们默认使用Django提供的auth_user表,创建数据时,可以 ...
- django用户认证系统——注册3
用户注册就是创建用户对象,将用户的个人信息保存到数据库里.回顾一下 Django 的 MVT 经典开发流程,对用户注册功能来说,首先创建用户模型(M),这一步我们已经完成了.编写注册视图函数(V),并 ...
- django xadmin 默认密码_Django的认证系统
点击上方 "Python Web与Django大咖之路"关注我! Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用 ...
- Django的身份认证系统
1 . 在Django中使用身份认证系统 Django的身份认证系统实际上是一个app,该app叫做django.contrib.auth,它在django contrib模块下 使用时只需要在set ...
- Django博客系统(用户中心展示)
1. 页面展示 1.在users.views.py文件中定义视图 from django.views import Viewclass UserCenterView(View):def get(sel ...
最新文章
- 04_SpringCloud 整合Ribbon细粒度配置自定义
- oracle rollup分组没有数据时为0_数据库周刊19│GBASE适配鲲鹏;MySQL窗口函数;OGG双向数据同步……...
- Docker镜像下载到本地及恢复
- LOGO与BASIC语言编程入门pdf
- 【日常】关于爬虫中iframe节点处理小结(以超星课件下载为例)
- regedit是什么意思_regedit用法_regedit参数_reg的注册与反注册
- html目录链接怎么做,word目录超链接怎么做
- 【PHP插件】Easypanel,PHP各版本For linux版 (集成zend和ioncube)
- 一分钟让你知道Hadoop是什么
- “做真实的自己”是个坑
- 了解DNS劫持及dns劫持修复方法
- Stacked Attention Networks for Image Question Answering(用于图像问答的堆叠注意力网络)
- HTTP基本使用方法
- 以鸿蒙为景柱1009无标题,鸿蒙的意思
- Chimaera:用区块链游戏思维将《玩家一号》的“绿洲”变为现实;网易有道将推语音助手及智能音箱
- 叮咚DsV1.0pj版(去授权)
- 【CS231n 课程笔记】第八讲-----常见的深度学习框架,以及GPU和CPU介绍。
- 武汉 华为 android,【武汉华为手机大全】武汉华为手机报价及图片大全-列表版-ZOL中关村在线...
- 编程之美 - 读书笔记 - 烙饼问题与搜索树
- 解决linux联网却不能看视频问题
热门文章
- 你需掌握的CSS知识都在这了(长文建议收藏,文末有福利)
- web前端是不是没有前景了?
- 有人说,30岁是程序员的一个末日期,写给30岁的程序员,到底该怎么做呢
- C语言分支语句和循环语句及练习
- 新rust怎么拆除围墙_“问题围挡”拆除 街道变漂亮了
- c语言指针生成numpy数组,python – 在cython中声明numpy数组和c指针
- NYOJ-邮票分你一半(dp)
- 【Deep Learning 五】课程二(mproving Deep Neural Networks),第一周(Setting up your Machine Learning Applicat)答案
- 2019计算机视觉领域顶级会议时间表
- Fescar TC-beigin流程