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')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM