第十一篇:auth模块

什么是auth模块

auth模块是django自带的与用户相关的功能模块

我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。

Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据。

auth模块中常用方法

auth模块是django用户相关的自带的功能模块,相关的信息记录于auth_user表。

如何创建超级用户

# 工具栏中Tools——Run manager.py Task——输入:

> createsuperuser
> 此处输入用管理员用户名(eg:admin)
> 此处输入邮箱(邮箱可以不填,直接跳过)
> 输入账户密码
> 确认账户密码

# 创建完成之后,auth_user表中就有超级管理员的记录(表中的密码是加密后的)

创建完成之后,可以在浏览器中登陆:

http://127.0.0.1:8000/admin

登陆之后,可以在浏览器中对所有的模型表进行操作。

auth方法大全

1、创建用户

# 创建普通用户
User.objects.create()  # 密码是明文,django校验时是和密文进行校验,因此此方法一般不使用
User.objects.createuser()  # 密码是密文

# 创建超级管理员
User.objects.createsuperuser()  # 邮箱要给数据 通过创建逻辑代码的方式创建超级管理员,需要填写邮箱

# eg:
User.objects.createuser(username=xxx, password=xxx)
User.objects.createsuperuser(username=xxx, password=xxx, [email protected])

2、校验用户名和密码

res = auth.authenticate(username=username,password=password)  # 用户名和密码两个一个都不能少
# 该方法当用户名和密码正确的时候返回的用户对象 不正确返回None

3、保存用户的登录状态

只要执行了这一句话,之后在任意可以获取到request对象的地方,都可以通过request.user获取到当前登录的用户对象。

如果没有登录,request.user获取到的是匿名用户(AnonymousUser)。

auth.login(request,user_obj)  # 这一句执行之后 request.user获取当前登录的用户对象

# 此条语句等价于操作django_session中的表

4、判断用户是否登录,以及获取当前登录用户对象

request.user.is_authenticated()  # 判断用户是否登录 返回True或False
request.user  # 登录用户对象

5、登录校验装饰器

装饰在需要登录后可以操作的功能,例如转账,查看个人信息等功能,需要用户先进行登录。

# 先导入装饰器模块
from django.contrib.auth.decorators import login_required

# 局部配置
@login_required(login_url='/login/')  # 如果没有用户未登录,跳转到指定的url
def xxx(request):
    return HttpResponse('xxx页面')

# 全局配置
# 配置文件(settings.py)中写以下代码
LOGIN_URL = '/login/'

@login_required
def xxx(request):
    return HttpResponse('xxx页面')

# 如果两个都设置了 那么优先执行局部配置

6、修改密码

# 校验密码
is_right = request.user.check_password(old_password)  # 校验原密码是否正确,返回值返回的是bool值

# 修改密码
request.user.set_password(new_password)    # 设置密码
request.user.save()                        # 设置完密码后,一定要保存

7、注销登录

注销功能记得也要加登录装饰器,因为只有登录后才可以注销

auth.logout(request)  # 注销登录

# 使用auth模块注销,django会自动操作session表,这里的注销功能其实就是操作的session表

如何扩展auth_user表

在扩展表之前需要是一个全新的库,已使用并已经创建auth_user表就不能再扩展了

利用一对一表关系(了解)

利用类的继承

from django.contrib.auth.models import User
# 导入User类,点击进去,发现继承的是AbstractUser这个类

因此,我们也可以自定义类,并继承AbstractUser

# 1 类的继承
from django.contrib.auth.models import AbstractUser
# Create your models here.
class Userinfo(AbstractUser):
    phone = models.BigIntegerField()
    avatar = models.FileField()
    # 扩展的字段 尽量不要与原先表中的字段冲突

# 2 配置文件
AUTH_USER_MODEL = '应用名.表名'
"""
django就会将userinfo表来替换auth_user表
并且之前auth模块所有的功能不变 参照的也是userinfo表
"""

数据库迁移命令老是报错,无法解决,最快的方式就是重新建一个库,用新库,或者把应用名下的migrations目录下的所有文件删除,只保留__init__.py,然后重新执行数据库迁移命令。

原文地址:https://www.cnblogs.com/cnhyk/p/12274332.html

时间: 2024-08-30 15:17:21

第十一篇:auth模块的相关文章

Django框架(十一)——Auth模块

Auth模块 一.什么是auth模块 Auth模块是Django自带的用户认证模块 Auth模块是Django自带的用户认证模块,可以实现包括用户注册.用户登录.用户认证.注销.修改密码等功能.默认使用 auth_user 表来存储用户数据. 二.Auth模块使用 1.创建超级用户  (createsuperuser) 创建超级用户就是在auth_user表中插入数据,密码是加密的. 在  Run manage.py Task  创建 createsuperuser 2.查询用户(authent

Python开发【第二十一篇】:Web框架之Django【基础】

Python开发[第二十一篇]:Web框架之Django[基础] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5237704.html Python之路[第十六篇]:Django[基础篇] Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 基本配置 一.创建django程序 终端命令:django-a

第十一篇 SQL Server安全审核

本篇文章是SQL Server安全系列的第十一篇,详细内容请参考原文. SQL Server审核SQL Server审核是指你可以在数据库或服务器实例监控事件.审核日志包含你选择捕获的事件的列表,在服务器上生成数据库和服务器对象.主体和操作的活动记录.你几乎可以捕获任何发生的事情的数据,包括成功和不成功的登录,读.更新.删除的数据,管理任务,以及更多.审核可以深入到数据库和服务器.这似乎有点奇怪存在办法回头追溯那些已经发生的事件.但审核日志往往是你用于检测攻击的第一和最佳的资源,特别是当攻击只探

django自关联,auth模块

一.自关联 写蛮好的一篇博客:https://www.cnblogs.com/Kingfan1993/p/9936541.html 1.一对多关联 1.表内自关联是指表内数据相关联的对象和表是相同字段,这样我们就直接用表内关联将外键关联设置成自身表的字段 2.例如,对于微博评论,每条评论都可能有子评论,但每条评论的字段内容应该都是相同的,并且每条评论都只有一个父评论,这就满足了一对多的情形,父评论id为关联字段,可以对应多个子评论 3.外键关联是在子评论中,有关联字段的是子评论,子评论查父评论是

Auth模块、插拔式设计、BBS表设计

Auth模块 Auth模块是什么 Auth模块是Django自带的用户认证模块:因为我们会实现一些用户的登录.认证.注销等一些功能都需要先去验证,实现起来比较的麻烦.所以Django它默认的使用auth_user表来存储用户的数据. Auth模块常用方法 form django.contrib import auth # 导入auth模块 1.authenticate()认证 user = authenticate(usernmae='username',password='password')

秒杀多线程第十一篇 读者写者问题

与上一篇<秒杀多线程第十篇 生产者消费者问题>的生产者消费者问题一样,读者写者也是一个非常著名的同步问题.读者写者问题描述非常简单,有一个写者很多读者,多个读者可以同时读文件,但写者在写文件时不允许有读者在读文件,同样有读者在读文件时写者也不去能写文件. 上面是读者写者问题示意图,类似于生产者消费者问题的分析过程,首先来找找哪些是属于“等待”情况. 第一.写者要等到没有读者时才能去写文件. 第二.所有读者要等待写者完成写文件后才能去读文件. 找完“等待”情况后,再看看有没有要互斥访问的资源.由

SQL Server 索引 之 书签查找 &lt;第十一篇&gt;

一.书签查找的概念 书签可以帮助SQL Server快速从非聚集索引条目导向到对应的行,其实这东西几句话我就能说明白. 如果表有聚集索引(区段结构),那么书签就是从非聚集索引找到聚集索引后,利用聚集索引定位到数据.此处的书签就是聚集索引.如果表没有聚集索引(堆结构).那么扫描非聚集索引后,通过RID定位到数据,那么此处书签就是RID. 所谓的书签查找,就是通过聚集索引,然后利用聚集索引或RID定位到数据. 不论表示堆结构还是区段结构,数据的存放都是数据库文件的某文件->某页->某行,因此定位数

第二十一篇 生命的全景

第二十一篇  生命的全景 生命对于我们来讲非常的熟悉,我们身边就有形形色色的生命,我们所生活的这个空间就是生命的空间.然而,就是我们习以为常的生命,却蕴含着极其广泛的意义和无穷的奥秘.就目前我们在宇宙中的能力而言,还无法做到站在生命空间之上的高度去总览全局,还无法对生命进行全面地概括与剖析. 如今,凭我们小宇宙家族现阶段的能力,还没有办法了解生命全部的奥秘,但是,随着我们对生命的不断探索,会有越来越多的生命奥秘被我们认知. 虽说我们对生命的了解还很有局限,但是我们目前的认知水平已经可以探知到:生

第十一篇 Integration Services:日志记录

本篇文章是Integration Services系列的第十一篇,详细内容请参考原文. 简介在前一篇,我们讨论了事件行为.我们分享了操纵事件冒泡默认行为的方法,介绍了父子模式.在这一篇,我们会配置SSIS内置日志记录.我们会演示简单和高级日志配置,保存和查看日志配置,生成自定义日志消息.SSIS任务事件打开Precedence.dtsx包.你的控制流面板应该如图11.1所示:图11.1在第九篇和第十篇,我们关注在序列容器1.我们在Script Task 4和序列容器1上创建了OnError事件处