Django--Auth模块使用

1.Auth模块介绍

1.1 Auth模块是Django自带的用户认证模块,用于处理用户账户、群组、许可和基于cookie的用户回话

Django的认证系统主要包括下面几个部分

1.用户

2.许可

3.组

4.可配置的密码hash系统

5.用于用户登录或者限制访问的表单和视图工具

6.可插拔的后台系统

2.使用Django自带的auth

models文件中创建基于AbstractUser的一个类

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
    #添加自己的用户属性
    nid = models.AutoFiled(primary_key=True)
    phone =models.CharField(max_length=11)
    

按着上面的方式拓展了内置的auth_user表之后,一定要在settings.py文件中告诉Django,现在要使用新定义的UserInfo表来做用户认证,

#引入Django自带的User表,继承使用时需要设置
AUTH_USER_MODEL ='app名.UserInfo'
#一旦指定了新的认证系统所使用的表,需要重新再数据库中创建该表,不能继续使用之前的auth_user表,配置完成之后进行数据库迁移操作
> makemigrations
> migrate
# 执行完上面的操作之后,在之前的auth_user表中会添加nid和phone连个字段

3.Auth组件的常用方法

1.authenticate:用户认证,不能用一般的查询数据展示,password是加密的,不能明文查询

2.login(HttpRequest,user) 接收一个httpresponse对象,以及一个经过认证的User对象,本质上会在后端为该用户生成相关的session数据,该函数实现一个用户登录的功能,

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

4.is_authenticated() 用来判断当前请求是否通过了认证

5.login_require() auth提供的一个装饰器,用来快捷的给某个视图添加登录校验,需要设置login_url的路径

6.models.User.objects.create_user auth提供的一个创建用户的方法,该方法将password进行了加密,必须提供用户名和密码

7.models.User.objects.create_superuser() 创建超级用户,必须提供用户名和密码

8.user.check_password() 检查密码是否正确,需要提供当前请求用户的密码 返回bool值

9.user.set_password(new_password) 修改密码,提供新的密码,然后保存(一定要调用save保存)
user.save()

4.创建用户开始

在pycharm菜单中tools->Run manage.py Task
命令行模式下执行以下代码

manage.py@DjangoDay02 > createsuperuser

bash -cl "/usr/local/bin/python3.7 /Applications/PyCharm.app/Contents/helpers/pycharm/django_manage.py createsuperuser /Users/zj/Documents/GitHub/DjangoDay02"
Tracking file by folder pattern:  migrations
Username:  root
Error: That username is already taken.
Username:  root123
Email address:  234234@qq.com
Warning: Password input may be echoed.
Password:  qwer1234
Warning: Password input may be echoed.
Password (again):  qwer1234
Superuser created successfully.

Process finished with exit code 0

创建了一个超级用户,用户名为root123 密码为qwer1234,Django自动帮我们对密码进行了加密

5.创建视图展示

from django.shortcuts import render,HttpResponse
from django.http import JsonResponse
# Create your views here.
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.decorators import login_required

from AuthTest.commonTools import requestJSON


@requestJSON
def index(request):
    if request.method == 'POST':
        dict = {'status': 100, 'msg': None}
        # 获取post信息
        userName = request.POST.get('name')
        password = request.POST.get('pwd')
        user = authenticate(username=userName,password=password)
        if user:
            dict['status'] = 200
            dict['msg'] = '登陆成功'
            #把user对象放到request对象中,所有的request对象都拥有这个对象
            login(request,user)
            return JsonResponse(dict)
        else:
            dict['status'] = 100
            dict['msg'] = '用户名或密码不正确'
            return JsonResponse(dict)
    else:
        return render(request,'AuthTest/index_page.html')


#添加装饰器,设置登录展示,没有登录的时候直接跳到登录界面 
@login_required(login_url='/index/')
def login_success(request):
    print(request.user)
    # 这个判断由装饰器实现了
    if request.user.is_authenticated:
        return render(request, 'AuthTest/login_success.html')
    else:
        return render(request, 'AuthTest/index_page.html')

def auth_logout(request):
    logout(request)
    return render(request, 'AuthTest/index_page.html')

demo地址.

posted @ 2019-06-18 13:20  蓝色的风1203  阅读(335)  评论(0编辑  收藏  举报