Django之auth模块用户认证模块
一、Auth模块
1)auth模块是什么。登录后台使用的账号密码,则就是使用的auth模块创建的表
Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。
此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。
Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,
它默认使用 auth_user 表来存储用户数据。
2)auth模块的功能
2.1)导入auth模块
from django.contrib import auth
2.2)auth模块下的方法。authenticate()。认证功能
提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。
如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。
authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。
用法:
user = authenticate(username='usernamer',password='password')
具体使用如下
from django.contrib import auth
def auth_test(request):
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(username=username, password=password)
if user:
print(user.username)
return HttpResponse("登录成功")
return HttpResponse("登录失败")
authenticate使用
2.3)login(request,user)。登录功能(认证成功后)
from django.contrib import auth
def auth_test(request):
user = auth.authenticate(request,username='user2',password='user123456') # 认证
print(user)
if user:
print(user.username) # 登录的用户名
auth.login(request,user)
return render(request,'auth_test.html')
auth.login(request,user)
登录后,前端也可获取到登录的用户名
<body>
<div>{{ request.user }}</div>
</body>
{{ request.user }}
在前端也可判断请求是否通过。
<body>
<div>{{ request.user }}</div>
<div>{{ request.user.is_authenticated }}</div>
</body>
is_authenticated
2.4)auth.logout(request)。用户退出方法
def auth_test_logout(request):
auth.logout(request)
return HttpResponse('退出成功')
auth.logout(request)
二、auth模块扩展。用于创建用户,登录装饰器
1)新增字段
1.1)修改配置文件settings.py
# AUTH_USER_MODEL = "app名.用户名表"
AUTH_USER_MODEL = "app01.UserInfo" # 指定表
settings.py
1.2)创建的表,继承AbstractUser。可重写表结构
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
nid = models.AutoField(primary_key=True)
telephone = models.CharField(max_length=)
AbstractUser
2)创建用户
def auth_test_creat_user(request):
# 管理员
UserInfo.objects.create_superuser(username='usersb1',password=,email='11111111@qq.com')
# 普通用户
UserInfo.objects.create_user(username='usersb2',password=,email='11111121@qq.com')
return HttpResponse('成功')
creat_user
3.1)登录装饰器方法一。视图函数前加上url
先导入装饰模块:from django.contrib.auth.decorators import login_required
@login_required(login_url='/auth_test_login/') # 登录以后才能有的操作
def auth_test_logout(request):
auth.logout(request)
return HttpResponse('退出成功')
@login_required
login_url='/auth_test_login/',没有登录跳转到的url
3.2)登录装饰器方法二。settings全局配置
LOGIN_URL = '/auth_test_login/'
settings.py
视图函数前就不用加url了
@login_required # 登录以后才能有的操作
def auth_test_logout(request):
auth.logout(request)
return HttpResponse('退出成功'
4) cbv模式加装饰器
4.1) 运用于类里面的单个函数
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required
@method_decorator(login_required,name='get')
class Host(View):
def get(self, request):
host_list = models.Host.objects.all()
return render(request, 'host.html', {"host_list": host_list}) def delete(self,request):
print('delete')
response = {'status': True, 'message': None, 'data': None}
body = QueryDict(request.body)
try:
nid = body.get('nid')
print(nid)
models.Host.objects.filter(id=nid).delete()
response['data'] = nid
except Exception as e:
response['status'] = False
response['message'] = '删除错误'
result = json.dumps(response, ensure_ascii=False)
return HttpResponse(result)
4.2)运用于类里面的所有函数
@method_decorator(login_required,name='dispatch')
class Host(View):
def get(self, request):
host_list = models.Host.objects.all()
return render(request, 'host.html', {"host_list": host_list})
5)检查密码。check_password(password)。
密码正确返回True,否则返回False。
check_password(password)
auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码。 tag = user.check_password('密码')
if tag:
print("ok")
else:
print("错误")
check_password('密码')
6)修改密码。set_password(password)
auth 提供的一个修改密码的方法,接收 要设置的新密码 作为参数。
注意:设置完一定要调用用户对象的save方法!!!
用法:
user.set_password(password='')
user.save()
set_password(password='')
一个简单的修改密码示例
@login_required
def set_password(request):
user = request.user
err_msg = ''
if request.method == 'POST':
old_password = request.POST.get('old_password', '')
new_password = request.POST.get('new_password', '')
repeat_password = request.POST.get('repeat_password', '')
# 检查旧密码是否正确
if user.check_password(old_password):
if not new_password:
err_msg = '新密码不能为空'
elif new_password != repeat_password:
err_msg = '两次密码不一致'
else:
user.set_password(new_password)
user.save()
return redirect("/login/")
else:
err_msg = '原密码输入错误'
content = {
'err_msg': err_msg,
}
return render(request, 'set_password.html', content)
7)User对象的属性
User对象属性:username, password
is_staff : 用户是否拥有网站的管理权限.
is_active : 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录。
三、总结(auth模块使用)
配置文件:settings.py
AUTH_USER_MODEL = "app01.UserInfo" # 创建扩展用户表
LOGIN_URL = '/auth_test_login/' # 装饰器的跳转登录url
创建表:models.py
from django.contrib.auth.models import AbstractUser # 继承 AbstractUser
class UserInfo(AbstractUser):
nid = models.AutoField(primary_key=True)
telephone = models.CharField(max_length=)
视图函数方法:views.py
auth.authenticate(request,username='user2',password='user123456') # 认证
auth.login(request,user) # 登录
print(request.user) # 属性,用户名
request.user.is_authenticated # 属性,判断请求是否通过 @login_required # 装饰器
UserInfo.objects.create_superuser() # 创建超级管理员
UserInfo.objects.create_user() # 创建普通管理员
check_password(password) # 检查密码
set_password(password) # 修改密码 前端文件:
request请求体里面含有user对象
后端有的属性,前端也能获取到
{{ request.user }}
{{ request.user.is_authenticated }}
用户权限控制:auth表注册
is_staff控制
Django之auth模块用户认证模块的更多相关文章
- (30)auth模块(django自带的用户认证模块)
Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的 ...
- auth模块用户认证
一.auth模块什么 auth模块时django自带的用户认证模块 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功 ...
- python2.0_day18_Django自带的用户认证模块的使用
用户验证我们基于一个项目来学习利用Django框架中的user表实现用户认证Django练习小项目:学员管理系统设计开发 项目需求: 1.分讲师\学员\课程顾问角色, 2.学员可以属于多个班级,学员成 ...
- Django自带的用户认证
1. 创建超级用户 python manage.py createsuperuser 2. 认证 校验用户名和密码 obj = auth.authenticate(request,user ...
- 6月29日学习总结 Django自带的用户认证
Django自带的用户认证 我们在开发一个网站的时候,无可避免的要设计.实现网站的用户系统.此时我们需要实现包括但不限于用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. D ...
- laravel7使用auth进行用户认证
原文地址:https://www.wjcms.net/archives/laravel7使用auth进行用户认证 laravel7 版本移除了 auth,大家都知道以前版本是直接使用 php arti ...
- Django自带的用户认证auth模块
一.介绍 基本上在任何网站上,都无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能. 使用Django,我们可以不需要自己写这些功能,因为Dj ...
- Django——Auth模块(用户认证模块)
1.Auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象. 而有了auth模块之后就可以很轻松的去验证用 ...
- SpringBoot+SpringSecurity之多模块用户认证授权同步
在之前的文章里介绍了SpringBoot和SpringSecurity如何继承.之后我们需要考虑另外一个问题:当前微服务化也已经是大型网站的趋势,当我们的项目采用微服务化架构时,往往会出现如下情况: ...
随机推荐
- Devexpress Gridview 自定义汇总CustomSummaryCalculate(加权平均)
Devexpress Gridview 提供了简单的求和,平均等方法,复杂的汇总方法则需要自定义,使用gridview 的CustomSummaryCalculate 事件,根据官网的文档及各论坛案例 ...
- 6. ZigZag Conversion (字符串的连接)
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...
- AWVS结果分析与实践-XSS
今天趁着老师接项目,做了一丢丢实践,以下是一点点感触. 都知道AWVS是神器,可是到我手里就是不灵.拿了它扫了一个URL,结果提示XSS漏洞,实践没反应,只好愉快地享受了过程.来看看. ...
- [剑指Offer]47-礼物的最大价值(DP)
题目描述 在一个m*n的棋盘每个格有一个礼物,每个礼物有一定价值(>0).从棋盘左上角到右下角,只能向下或向右走,问能拿到的礼物最大价值. 解题思路 dp. 可将二维数组版优化为一维数组版. 代 ...
- 在 JavaScript 中 ["1","2","3"].map(parseInt) 为何返回不是 [1,2,3] 却是 [1,NaN,NaN]?
这个问题我是希望有很多人可以一起交流的: 我在 http://blog.csdn.net/justjavac/article/details/19473199#t0 上看到了比较详细的解释, 但是具体 ...
- 纯css实现div中未知尺寸图片的垂直居中
1.淘宝的方法 在曾经的"淘宝UED招聘"中有这样一道题目: “使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中.” 当然出题并不是 ...
- pycurl提示load dll failed 找不到注册程序
原因:python虽然是2.7的 但有小版本区别 建议使用2.7.8
- WEB框架Django之Form组件
Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 一 通过form实现校验字段功能 模型:mod ...
- Vue Create 创建一个新项目 命令行创建和视图创建
Vue Create 创建一个新项目 命令行创建和视图创建 开始之前 你可以先 >>:cd desktop[将安装目录切换到桌面] >>:vue -V :Vue CLI 3.0 ...
- 9.13 h5日记
9.13 面试题 为什么两个P出此案的效果不同,原因是 浏览器在解析第二个P的时候,因为字母没有空格,浏览器会认为这个单词没有打完,所以不会换行. 列表 ul ol dl li 1.无序列表 ul ( ...