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有全局配置和局部配置

  1. 在装饰器括号内通过login_url参数局部指定跳转url

  2. 全局配置的话,用户没有登录的情况下,所有的视图统一跳转到一个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表

原文地址:https://www.cnblogs.com/jhpy/p/11774039.html