Auth模块

一、什么是auth模块

Auth模块是Django自带的用户认证模块

Auth模块是Django自带的用户认证模块,可以实现包括用户注册、用户登录、用户认证、注销、修改密码等功能。默认使用 auth_user 表来存储用户数据。

二、Auth模块使用

1.创建超级用户  (createsuperuser)

创建超级用户就是在auth_user表中插入数据,密码是加密的。

在  Run manage.py Task  创建

createsuperuser

2.查询用户(authenticate())

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

from django.contrib import auth
user_obj = auth.authenticate(request, username=name, password=pwd)

不能使用filter这种查询方法,因为user表存的密码是加密的

models.User.objects.filter(username=username,password=password).first()

3.登录用户(login())

该函数接收一个HttpRequest对象,以及一个经过查询认证的user_obj

登录之后,会将用户状态记录到session中

from django.contrib import auth

auth.login(request,user_obj)

4.登录成功

只要执行了上面那句话登录成功,你就可以在后端任意位置通过request.user获取到当前用户对象

user_obj = request.user

5.判断用户是否登录(is_authenticated)

用来判断当前请求是否通过了认证,如果通过就是true,反之false

request.user.is_authenticated

6.登录认证装饰器

快捷的给某个视图添加登录校验。

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

如果自定义了登录URL,则需要在settings.py文件中通过LOGIN_URL 设置登录路径

from django.contrib.auth.decorators import  login_required

@login_required(login_url='/xxx/')  # 局部配置 直接在装饰器里面写一个登录路径
def index(request):
pass


# 全局配置 settings文件中写
LOGIN_URL = '/xxx/'
设置完后直接写装饰器 @login_required 就可以

7.注册超级用户和普通用户

错误方法:User.objects.create(username =username,password=password)  # 创建用户名的时候 千万不要再使用create 了
User.objects.create_user(username =username,password=password) # 创建普通用户
User.objects.create_superuser(username =username,password=password,email='123@qq.com') # 创建超级用户 邮箱必填

8.校验密码(check_password())

#校验密码
request.user.check_password(old_password)

9.修改密码(set_password())

注意:修改密码的时候,一定要save保存,否则不会生效

request.user.set_password(new_password)
request.user.save()

10.退出登录(logout())

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

auth.logout(request)

11.User对象的其他属性

# 在网站上线以前,将is_active和is_staff设置为False
is_active # 禁止登录网站(用户还存在,封号)
is_staff # 是否对网站有管理权限(能不能登录admin) request.user.is_active = False
request.user.is_staff = False

三、自定义auth_user表

1.方法一:定义一个表模型,跟User一对一关联(不推荐使用)

from django.contrib.auth.models import User

class UserDetail(models.Model):
phone=models.CharField(max_length=32)
# 一对一跟auth_user表做关联
# 如果是从外部引入的表模型,是不能加引号的
# 如果加引号,只是在当前model找
user=models.OneToOneField(to=User)

2.方法二:使用类的继承,继承(AbstractUser)

from django.contrib.auth.models import AbstractUser

class Userinfo(AbstractUser):
# 千万不要跟原来表中的字段重复 只能创新
phone = models.BigIntegerField()
avatar = models.CharField(max_length=32)

注意:

1.一旦我们通过继承来实现扩展auth_user表,那么做数据库迁移,以后就没有auth_user这个表了,以后认证组件用的表就是UserInfo。原来使用 auth_user 表模型的地方全部要用新的表模型——UserInfo(这个是你自定义的模型类)

2.告诉django不再使用auth默认的表,而是使用你自定义的表,需要在settings.py中设置
AUTH_USER_MODEL = 'app01.Userinfo' '应用名.类名'

Django框架(十三)——Auth模块的更多相关文章

  1. Django框架中auth模块的详解

    auth模块 auth模块是对登录认证方法的一种封装,本身就是一个对象,可以获取用户的详细信息,有了auth模块可以验证登录信息是否存在数据库中,还可以检验用户是否已经登录,校验密码等 auth方法 ...

  2. 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

  3. Django 2.0 学习(17):Django 用户认证(auth模块)

    Django 用户认证(auth模块) 一.认证登陆 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中:如果用户存在于数据库中,然后再验证用户输入 ...

  4. Django框架 之 Auth用户认证

    Django框架 之 Auth用户认证 浏览目录 auth模块 user对象 一.auth模块 1 from django.contrib import auth django.contrib.aut ...

  5. 四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

  6. [Django高级之Auth模块]

    [Django高级之Auth模块] auth模块 ←详情点击查看 1.Auth模块是什么 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统 ...

  7. 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化

    第三百零九节,Django框架,models.py模块,数据库操作——F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...

  8. 第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多

    第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多.一对一.多对多 链表操作 链表,就是一张表的外键字段,连接另外一张表的主键字段 一对多 models.Forei ...

  9. 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  10. 五 Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

随机推荐

  1. gtibase rpm包制作

    gitbase 是一个很不错的代码分析工具,我们可以直接使用sql来分析团队的代码,以下是rpm 包的制作 简单说明 rpm 包的制作使用了fpm 一个简单,方便可以跨平台的软件包制作工具 gitba ...

  2. haproxy 2.0 dataplaneapi rest api 转为graphql docker 镜像

    为了方便直接使用haproxy dataplaneapi graphql 格式的查询,制作了一个简单的docker 镜像 基于dotenv 进行配置管理,可以直接通过环境变量传入参数,处理不同hapr ...

  3. A@GC*014

    A@GC*014 A Cookie Exchanges 卡时跑了1s就输出-1 每次操作会使三个数的极差缩小一半,所以最多\(\log\)次之后就会出现\(A=B=C\)的情况,可以直接判掉 B Un ...

  4. 【Wannafly挑战赛24E】旅行

    [Wannafly挑战赛24E]旅行 题面 牛客 题解 首先有一个非常显然的\(dp\):我们直接把\(s\rightarrow t\)的路径抠出来然后设\(f_{i,j}\)表示到第\(i\)个点, ...

  5. PHP Record the number of login users

    Function to record how many times the user logs in Connect to the database first: you can create a n ...

  6. Git常用命令及配置

    Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. Git ...

  7. python requests 保存图片

    html = requests.get('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec ...

  8. 如何将 普通代码变成 java lamband表达式

    public static void main(String[] args) { Map<String, String> map = new HashMap<>(); List ...

  9. php 加载 zip 文件

    header('Content-type: application/zip');header('Content-Disposition: attachment; filename="Quer ...

  10. RSA前台加密后台解密的应用

    写在前面 项目安全测试需要将登录功能修改, AES加密不符合要求, 现改为RSA非对称加密.(将登录密码加密后传给后台, 后台解密后再进行一系列的校验) .期间遇到了前台js加密但是后台解密失败的问题 ...