zoukankan      html  css  js  c++  java
  • Django认证系统之自带auth_user表操作

    Django自带auth_user表操作:

    views.py

    from django.contrib  import  auth#引入auth模块

    from django.contrib.auth.models import User # auth应用中引入User

     

    1)用户注册,添加记录(create_use普通用户,create_superuser超级用户)

    # 注册

    def register(request):

        if request.method == 'GET':

            register_obj = RegisterForm()

            return render(request, 'register.html', {'register_obj': register_obj})

        elif request.method == 'POST':

            data = request.POST       

            register_obj = RegisterForm(data)

            if register_obj.is_valid():

                user_obj = register_obj.cleaned_data

                print(user_obj)

                username = user_obj.get('name')

                password = user_obj.get('password')

             

    #通过auth模块,进行新用户注册,使用User表创建新用户(create_use普通用户,create_superuser超级用户)

                if not User.objects.filter(username=username).exists():

                    new_obj = User.objects.create_user(username=username, password=password)

                    print(f'新用户{username}注册成功!')

                    return redirect('login')

                else:

                    register_obj.add_error('name', '用户名已存在!')

                    return render(request, 'register.html', {'register_obj': register_obj})

            else:

                return render(request, 'register.html', {'register_obj': register_obj})

    (2)登录校验(auth.authenticate(username=username, password=password))

    # 登录

    def login(request):

        if request.method == 'GET':

            return render(request, 'login.html')

        elif request.method == 'POST':

           

            username = request.POST.get('username')

            password = request.POST.get('password')

            # 调用auth.authenticate()方法进行登录校验

            user_obj = auth.authenticate(username=username, password=password)

            print(user_obj)

            if user_obj:

    #校验成功,调用auth.loginrequest, user_obj方法:

    ①执行和session一样操作(创建随机sessionid;加密添加sesion表;写入cookie

    ②自动在request对象添加一个属性user,在后续身份认证直接调用request.user.is_authenticated时自动判断是否登录

                auth.login(request, user_obj)

                return JsonResponse({'status': 1, 'url': reverse('index')})

            else:

                return JsonResponse({'status': 0, 'url': ''})

     3)访问认证(request.user.is_authenticated

    def index(request):

        if request.user.is_authenticated:#调用request.useris_authenticated伪方法进行认证

            print(request.user)#request.user就是当前用户对象,打印结果为用户名称

            if request.method == 'GET':

                return render(request, 'index.html')

        else:

            return redirect('login')

     

    4)退出登录(auth.logout(request)

    def logout(request):

        auth.logout(request)#调用 auth.logout(request)方法,类似sessionrequest.session.flush()同时删除session表记录和cookie

        return redirect('login')

     

    (5)修改密码(request.user.check_password(),request.user.set_password(),request.user.save()

    def reset_psd(request):

        if request.user.is_authenticated:

            if request.method == 'GET':

                return render(request, 'reset_psd.html')

            elif request.method == 'POST':

                old_password = request.POST.get('old_password')

                new_password = request.POST.get('new_password')

                r_new_password = request.POST.get('r_new_password')

                # ret=request.user.check_password(old_password)

                # print(ret)

                if request.user.check_password(old_password):#调用request.user.check_password(old_password)判断原密码是否正确

                    if new_password == r_new_password:

                        request.user.set_password(new_password)#调用request.user.set_password(new_password设置新密码

                        request.user.save()#调用request.user.save()进行保存更新

                        return JsonResponse({'status': True, 'info': '操作成功!', 'url': reverse('index')})

                    else:

                        return JsonResponse({'status': False, 'info': '两次新密码不一致!', 'url': ''})

                else:

                    return JsonResponse({'status': False, 'info': '操作失败:原密码输入有误!', 'url': ''})

            return JsonResponse({'status': False, 'info': '操作失败!', 'url': ''})

     

        else:

            return redirect('login')

  • 相关阅读:
    我要翻译《Think Python》- 004 第二章 变量, 表达式和语句
    我要翻译《Think Python》-003 第一章 编程之道
    我要翻译《Think Python》-002 贡献列表 & 目录部分
    我要翻译《Think Python》
    ORA-12514 解决方法
    好玩的东西
    sublime HtmlPrettify
    [转]bing壁纸天天换 初识shell魅力
    nginx+lua+redis 处理APK包替换
    算法整理
  • 原文地址:https://www.cnblogs.com/open-yang/p/11223226.html
Copyright © 2011-2022 走看看