06.Django-用户认证
用户认证
Django 内置一个 auth 模块,帮助用户实现注册、登录、注销以及修改密码等功能,帮助开发者省去了很多功夫
用于认证的数据表
auth_user- User是
auth模块中维护用户信息的关系模式(继承了models.Model), 数据库中该表被命名为auth_user
- User是
auth_groupauth_user_user_permissions- User和Permission通过多对多字段
user.user_permissions关联,在数据库中由auth_user_user_permissions数据表维护。
- User和Permission通过多对多字段
auth_user_groups- User对象中有一个名为
groups的多对多字段, 多对多关系由auth_user_groups数据表维护。Group对象可以通过user_set反向查询用户组中的用户。
- User对象中有一个名为
auth_group_permissionsauth_permission
django.contrib.auth模块
使用
要使用Django自带的认证功能,首先要导入auth模块
from django.contrib import auth
auth提供的方法
authentioate()提供了用户认证,即验证用户名以及密码是否正确,一般需要
username和password两个关键字参数;如果通过认证,
authentioate()函数会返回一个User对象;authentioate()函数会在User对象上设置一个属性标识,这个属性标识经过数据库验证用户名和密码;当我们试图登录一个从数据库中直接取出来不经过
authentioate()的User对象时会报错。login(request)接收一个
HttpRequest对象,以及一个通过authentioate()函数认证的User对象;实现用户登录功能,会在后台为登录用户生成
session数据;执行过
login()方法的用户对象,就能通过request.user拿到当前登录的用户对象,从而取出用户的相关信息,否则取得的将是一个匿名用户对象AnonymounsUser Object。logout(request)接收一个
HttpRequest对象,无返回值;当调用函数时,当前请求的session信息全部被清除;
即使当前用户没有登录,调用该函数也不会报错。
login_required()
auth模块提供的一个装饰器工具,能够便捷地为某个视图添加登录校验。若用户没有登录,则默认会跳转到
accounts/login/,并传递当前访问url绝对路径。自定义跳转路径,只需在
settings.py中添加:LOGIN_URL = '/login/'from django.contrib.auth.decorators import login_required @login_required
def home(request):
pass
User对象的方法
is_authentioated()检查用户是否已经通过了认证;
如果是通过
auth函数返回的真实的User对象,返回值则为True;create_superuser()
该方法用于创建一个超级用户,接收
username、password两个必要参数。效果与执行python manage.py createsuperuser等同。create_user()
一般情况
create_superuser()方法很少使用,最常使用的是create_user()方法,它将会创建一个普通用户,常应用于注册视图中。创建用户所需字段,应与
auth_user数据表中字段对应。set_password[password]
该方法用于修改密码,接收要新密码作为参数,最后一定要执行
save()方法保存,否则无效。check_password[password]
检查登录用户密码是否正确,需要当前请求用户的密码;
密码正确返回 True,否则返回 False。
User对象属性
is_staff
判断用户是否拥有网站的管理权限
is_active
判断是否允许用户登录。
设置为False时可以不用删除用户来禁止用户登录。
auth模块拓展
由于 auth 模板中 auth_user 数据表字段是固定的,因此当我们使用 auth 模块,想要添加额外的字段时,就需要对其进行拓展。
拓展的方法:
模型中新增一个表,与
auth_user表一对一关联继承内置的
AbstractUser类:常用模型
models.py中新建一个类,继承自AbstractUser:from django.contrib.auth.models import User, AbstractUser # 导入 AbstractUser 类 class UserInfo(AbstractUser):
"""
继承 AbstractUser
新增字段:phone、addr
"""
phone = models.CharField(max_length=11, verbose_name='手机号码')
addr = models.CharField(max_length=128, verbose_name='家庭地址')
配置
settings.py新增的类继承
AbstractUser,拓展后将会覆盖auth_user表,因此需要配置settings,使默认认证知道要使用哪种表认证。# settings.py
# 在最后添加如下代码
AUTH_USER_MODEL = 'app名.新增的类名' AUTH_USER_MODEL = 'app.UserInfo' # 示例
迁徙数据表
python manage.py makemigrations
python manage.py migrate
创建用户
拓展
auth模块后,使用的不再是原来auth_user表,而是新表app.UserInfo表,因此在创建用户时应该注意。# 拓展之前
from django.contrib.auth.models import User
user_obj = User.objects.create_user(username='lila', password='1234') # 拓展之后
from app.models import UserInfo
user_obj = UserInfo.objects.create_user(username='lila', password='1234')
- 若已经迁徙了模型,拓展
auth模块时,需要将migrations文件夹下文件(如:0001_initial.py文件删除),否则会报ValueError: Related model u'app.model' cannot be resolved。 - 若还没有迁徙模型,那么正常执行即可。
06.Django-用户认证的更多相关文章
- [django]用户认证中只允许登陆用户访问(网页安全问题)
当设计一个重要网页时,一般要求未从登陆界面访问的用户不能进入其他页面,那么需要如何设置呢? 如下 django中的url.py urlpatterns = [ url(r'^$', 'login ...
- Django 用户认证及OneToOneField
Django 用户认证如果自己不想写 就可以用django自带的认证 首选导入模块 models.py #!/usr/bin/env python #_*_ coding:utf8 _*_ from ...
- django用户认证系统——拓展 User 模型
Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...
- “Django用户认证系统”学习资料收集
首推追梦人物——Django用户认证系统 待续……
- Django 2.0 学习(17):Django 用户认证(auth模块)
Django 用户认证(auth模块) 一.认证登陆 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中:如果用户存在于数据库中,然后再验证用户输入 ...
- django用户认证系统——重置密码7
当用户不小心忘记了密码时,网站需要提供让用户找回账户密码的功能.在示例项目中,我们将发送一封含有重置用户密码链接的邮件到用户注册时的邮箱,用户点击收到的链接就可以重置他的密码,下面是具体做法. 发送邮 ...
- django用户认证系统——修改密码6
再此之前我们已经完成了用户登录.注册.注销等功能,接下来让我们继续为用户提供修改密码的功能.该功能 Django 的 auth 应用也已经为我们提供,过程几乎和之前的登录功能完全一样. 编写修改密码模 ...
- django用户认证系统——拓展 User 模型2
Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...
- django用户认证系统——基本设置1
网站提供登录.注册等用户认证功能是一个常见的需求.因此,Django 提供了一套功能完整的.灵活的.易于拓展的用户认证系统:django.contrib.auth.在本教程中,我将向你展示 auth ...
- Django——用户认证
Django--用户认证 用户与Authentication(身份验证) Django 用户认证系统处理用户帐号,组,权限以及基于cookie的用户会话. 这个系统一般被称为 auth/auth (认 ...
随机推荐
- Rasa init报错:AttributeError: type object 'Callable' has no attribute '_abc_registry'
错误:Rasa init --no-prompt 报错 原因:Python升级到3.7后会遇到该问题 解决:pip uninstall typing
- sonar 安装,centos7配置优化
/etc/sysctl.conf /etc/systemd/system.conf /etc/security/limits.conf /proc/sys/fs/file-max /etc/secur ...
- vue上的简单轮播图
好久没写轮播图了,今天在vue上写了个超简单的,效果还ok. .moveLeft{position:relative;right:ZOOMpx;transition:all 1s;} 原理是滚动时利用 ...
- Angular知识点复习
Angular第三方UI组件库(github搜“awesome angular ")-----lonic 概述:是一个第三方的适用于移动端App的UI组件库,可以与Angular/React ...
- 【MySQL】深入理解MySQL锁和事务隔离级别
先看个小案例: 话不多说,上案例,先创建一个表 mysql> CREATE TABLE IF NOT EXISTS `account`( `id` INT UNSIGNED AUTO_INCRE ...
- Poj1328 用雷达覆盖所有的岛屿
(此配图来自http://blog.csdn.net/zhengnanlee/article/details/9613161) 图中ABCD为海岛的位置.题目中会给出几个海岛的坐标位置,雷达覆盖半径d ...
- pyenv,轻松切换各种python版本
pyenv,轻松切换各种python版本 解决什么问题 mac自带python2,md又不能删掉他 linux也自带python2,这玩意都过时了,也不赶紧换掉 安装pyenv git 安装 git ...
- Docker 错误:network xxx id xxxx has active endpoints
问题描述:Docker Compose 部署的项目,使用docker-compose down 命令关闭时,提示错误: Removing network xxxl_default ERROR: net ...
- spring的mybatis-puls 配置,增删改查操作,分页
pom <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or ...
- 转 vue动画总结
使用过渡类名(有进入及出去,适合显示隐藏,需要配合v-if) .v-enter,//进入前 .v-leave-to {//离开后 只需要入场动画 可以把v-leave-to删掉 opacity: 0; ...