zoukankan      html  css  js  c++  java
  • 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地址.

  • 相关阅读:
    Hash表的查找-C语言
    二叉排序树-C语言
    线性表的查找算法-C语言
    拓扑排序和关键路径
    图结构的创建与遍历-C语言
    MySQL数据库基本脚本命令
    哈夫曼树编码-C语言
    协程简述
    Python多线程编程-Threading库
    Python多进程编程-multiprocessing库
  • 原文地址:https://www.cnblogs.com/zj901203/p/11044668.html
Copyright © 2011-2022 走看看