auth模块

[TOC]

一、什么是author模块

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

二、auth模块的使用

1、创建超级用户(create_superuser())

创建超级用户就是在auth_user表中插入数据,密码是加密的,因此不能手动在数据库中插入数据

(1)用命令创建

python3 manage.py createsuperuser

(2)用Python代码创建

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

2、验证用户(authenticate())

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

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

相当于是在数据库中查询:

user=models.User.objects.filter(name=name,pwd=pwd).first()

3、登录用户(login())

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

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

user = auth.authenticate(username=username, password=password)
if user is not None:
login(request, user)
return HttpResponse('登录成功')

4、登录成功

一旦登录成功,调了这个函数login(request,user),在以后的视图类(函数)中的request中就会有一个user对象,就是当前已登录的用户对象。

5、注销(logout())

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

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

auth.logout(request)

6、登录认证装饰器

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

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

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

from django.contrib.auth.decorators import login_required

@login_required(redirect_field_name='eee',login_url='/login/')
# redirect_field_name:修改?后面的key值,一般不回去修改 # login_url:如果没有登录,跳转到的页面
# login_url局部配置
@login_required(login_url='/login/') # login_url全局配置
# 在setting文件中配置
LOGIN_URL='/login/'
直接使用 @login_required

7、创建普通用户(create_user())

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

8、校验密码(check_password())

# 先拿到用户(可以是登录用户,可以现查)
user = request.user
# 或者
user = authenticate(username=username, password=password) pwd = request.POST.get('pwd')
ret = user.check_password(pwd)

9、修改密码(set_password())

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

修改密码时,可以先校验原密码输入是否正确,原密码正确再开始修改密码

user.set_password(pwd)
user.save()

10、is_authenticated()

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

ret = request.user.is_authenticated()

11、删除用户

删除用户和用orm在表中删除数据一样

12、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):
# username,password...都继承了
phone=models.CharField(max_length=32)
sex=models.BooleanField()

注意:

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

  • 引用Django自带的User表,继承使用时需要设置,在setting中对新表进行配置:

AUTH_USER_MODEL ='app01.UserInfo'

最新文章

  1. 我使用celery以及docker部署遇到的问题
  2. Python自动化之YAML解析
  3. ios Coredata 的 rollback undo 等事物处理函数
  4. spin_lock 和 spin_lock_irqsave
  5. SqlServer基础:IsNull
  6. Android开发常用的一些第三方网站
  7. 测试web数据库的分布式事务atomikos 的三种数据源 SimpleDataSourceBean,AtomikosDataSourceBean,AtomikosNonXADataSourceBean
  8. dmucs与distcc
  9. WPF 之 实现TextBox输入文字后自动弹出数据(类似百度的输入框)
  10. [SQLServer]学习总结笔记(基本涵盖Sql的所有操作)
  11. 《boot分区监控的小脚本》
  12. Java .Net C++ RSA 加密
  13. http://f.dataguru.cn/forum.php?mod=viewthread&tid=44212&fromuid=4771
  14. MapReduce中的map个数
  15. 摇滚吧HTML5!有声前端交互!(一)
  16. hadoop三个配置文件的参数含义说明core-site.xml,hdfs-site.xml,mapred-site.xml
  17. zabbix监控docker
  18. mac攻略(1) -- 简单配置php开发环境
  19. MySQL基础操作1
  20. mqtt 客户端 基于Python

热门文章

  1. 插件化框架解读之四大组件调用原理-Service(三)下篇
  2. MySQL Workbench无法显示左侧的navigator,只显示Object info和Session
  3. Javascript基础四(数组,字符,对象,日期)
  4. 饿汉单例模式 and 懒汉单例模式
  5. 大哥带我走渗透4(中)----oracle报错注入
  6. Jmeter接口压力测试(先登录再测接口)
  7. CNN基础三:预训练模型的微调
  8. 16.ThreadGroup线程组
  9. 07.interrupt
  10. 写一个自定义类加载器demo