Auth模块
一.Auth模块是干什么的
它是Django自带的一个强大的用户认证的模块,用户系统相关的功能,注册登录,用户认证,注销,修改密码.
二.Auth模块常用的有哪些方法?
介绍方法之前先写一个功能通过功能来更好的认识Auth模块
创建炒鸡用户,用来登陆django admin的后台管理
createsuperuser
密码输入大于8位,Django中创建用户的时候默认的密码字节数量是大于8位的.
模块导入
from django.contrip import auth
搭建好html文件
登录
先放完整代码
from django.shortcuts import render.HttpResponse,redirect
from djang.contrip import auth
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# models.User.objects.filter(username=username,password=password).first()
# user_obj = auth.authenticate(username=username,password=password)
# user_obj = auth.authenticate(username=username)
# is_alive = User.objects.filter(username=username)
#
# print(is_alive)
# print(is_alive.first().password)
"""
该方法会有一个返回值 当条件存在的情况下 返回就是数据对象本身
条件不满足 直接返回None
"""
# if user_obj:
# print(user_obj)
# print(user_obj.username)
# print(user_obj.password)
# # 一定要记录用户状态 才算真正的用户登录
# # request.session['user'] = user_obj
# auth.login(request,user_obj)
# """该方法会主动帮你操作session表 并且只要执行了该方法
# 你就可以在任何位置通过request.user获取到当前登录的用户对象
# """
# old_path = request.GET.get('next')
# if old_path:
# return redirect(old_path)
# else:
# return redirect('/home/')
return render(request,'login.html')
1.authenticate()认证
提供用户认证功能,直接去数据找真实数据验证跟用户输入的用户名以及密码是否正确,如果认证成功则返回一个数据对象,认证失败就返回None.一般需要username,password两个关键字参数
配置{% csrf_token %}
即可
2.login(request,user) 保存登录状态
改函数接受request,以及经过认证后的存在user对象,这个函数会在后端为这个用户生成相关的session数据. 而知执行完之后只要能拿到request的地方都能通过request.user获取到当前登录用户的对象.
3.is_authenticated()
判断当前的用户是否通过了认证.
4.logout(request)退出登录
该函数没有返回值,调用这个函数,请求的session信息会全部清除,而且使用这个函数也不会报错.
from django.contrib.auth import logout
def logout_view(request):
logout(request)
# Redirect to a success page.
5.login_required()校验装饰器
装饰器工具,快捷给FBV视图添加登录校验.
在用户没有登陆的情况下跳转的url有全局配置和局部配置
-
在装饰器括号内通过login_url参数局部指定跳转url
-
全局配置的话,用户没有登录的情况下,所有的视图统一跳转到一个url配置文件中
form django.contrip.decorators import login_required
#@login_required(login_url='/xxx/') # 局部配置
@login_required# 全局配置
def my_view(request):
...
CBV视图添加登录校验
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
class Home(views.View):
@method_decorator(login_required)
def get(self, request):
return render(request, 'home.html')
6.check_password(password) 与set_password(password='') 检验设置密码
检验密码是否正确的方法,返回bool值
rt = user.check_password()
修改密码,设置完一定要保存密码(新密码也可以为对象)
user.set_password(password=new_password)
user.save()
7.用户注册
from djang.contrip.auth.models import User
使用create会密码直接存成明文
User.objects.create(username=username,password=password)
创建普通用户是加密的
User.objects.create_user(username=username,password=password)
创建炒鸡用户,邮箱必须填写
User.objects.create_superuser(username=username,password=password,email='123321@qq.com')
三.User对象的属性
username,password
is_staff : 用户是否拥有网站的管理权限.
is_active : 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录。
四.扩展默认表auth_user的字段
虽然django自带的auth模块很好用,但是他默认创建的auth_user表我们不能对其进行操作,那么怎么才能既可以使用auth简便的功能又可以进行表内字段的修改,扩展呢?
这时候我们就应该想到使用继承,类的三大特性之一.操作如下
继承
- 写一个默认类继承原来的auth_user类(自定义的表中字段不能跟原有的字段冲突)
-
告诉Django使用新建的类(在settings配置文件中)替代auth_user表