• 关于django的auth模块快速配置


    话不多说,我们来快速配置一个django的auth模块

    auth模块的功能:进行验证登录,注销,更改密码,保存登陆状态,判断登陆状态

    命令相关:

    1. 创建超级用户
        
            python manage.py createsuperuser
            
        2. 认证  校验用户名和密码
            obj = auth.authenticate(request,username,password)
            认证成功返回 对象
                    失败  None
                    
        3. 保存登录状态   记录到session
            login(request, user)
            
        4. 注销        删除session
            logout(request)
            
        5. 判断登录状态
            request.user.is_authenticated()
            
        6. 创建用户
            from django.contrib.auth.models import User
            # 密码是明文的
            User.objects.create(username=username,password=password)
            
            # 密码是密文的 普通用户
            User.objects.create_user(**form_obj.cleaned_data)
            
             # 创建超级用户
            User.objects.create_superuser(email='',**form_obj.cleaned_data)
            
        7. 密码相关
            # 检验密码
            request.user.check_password('root1234')
            # 设置密码
            request.user.set_password('admin1234')
            request.user.save()

    补充:django自带的用户字段有时不满足我们的需求,这时候需要我们进行自定义

    自定义步骤:

      1 在settings.py中声明user表 :AUTH_USER_MODEL = "app01.UserInfo"

      2 在models中导入: from django.contrib.auth.models import AbstractUser

      3 创建model,只需要声明额外添加的字段:  

    class UserInfo(AbstractUser):
        phone = models.CharField(max_length=11)

    配置完成:案例

    from django.shortcuts import render, redirect
    from django.contrib import auth
    from django.contrib.auth.decorators import login_required
    from app01.forms import RegForm
    from django.contrib.auth.models import User,AbstractUser
    from app01.models import UserInfo
    
    
    def login(request):
        if request.method == 'POST':
            # 方法一
            username = request.POST.get('username')
            password = request.POST.get('password')
            obj = auth.authenticate(request, username=username, password=password)
            # 方法二
            # request.POST.pop('csrfmiddlewaretoken')
            # obj = auth.authenticate(request, **request.POST)
            # print(obj)
            if obj:
                # 记录登录状态
                auth.login(request, obj)
    
                next = request.GET.get('next')
    
                if next:
                    return redirect(next)
                return redirect('/index/')
    
        # 返回登录页面
        return render(request, 'login.html')
    
    
    @login_required
    def index(request):
        # 登录状态
        # print(request.user.is_authenticated())
    
        print(request.user.password)
    
        if request.user.check_password('root1234'):
    
            request.user.set_password('admin1234')
            request.user.save()
        return render(request, 'index.html')
    
    
    # 注销
    def logout(request):
        auth.logout(request)
    
        return redirect('/login/')
    
    
    def reg(request):
        form_obj = RegForm()
    
        if request.method == 'POST':
            form_obj = RegForm(request.POST)
            if form_obj.is_valid():
                # 数据库操作
                # username = form_obj.cleaned_data.get('username')
                # password = form_obj.cleaned_data.get('password')
                #
                # UserInfo.objects.create(username=username,password=password)
    
                form_obj.cleaned_data.pop('re_password')
                UserInfo.objects.create_user(is_staff=1, **form_obj.cleaned_data)
    
                # 创建超级用户
                # UserInfo.objects.create_superuser(email='', **form_obj.cleaned_data)
    
                return redirect('/login/')
    
        return render(request, 'reg.html', {'form_obj': form_obj})
    

      

  • 相关阅读:
    数据库SQL实战- 获取所有非manager员工当前的薪水情况,给出dept_no、emp_no以及salary ,当前表示to_date='9999-01-01'
    数据库SQL实战- 查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序
    数据库SQL实战- 查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不准使用order by
    springboot 整合redis 以及redis的简单使用
    SQL语句按in排序
    编写高质量的代码
    linux 后渗透测试
    工具包学习与收集
    python 学习实例(cmdMD链接)
    python 学习之FAQ:find 与 find_all 使用
  • 原文地址:https://www.cnblogs.com/wszxdzd/p/10425463.html
Copyright © 2020-2023  润新知