Sobes.tech
Middle
227

Django-da identifikasiya sisteminin necə işləyir?

AI-dan cavab

sobes.tech Süni İntellekt

Django-da autentifikasiya, istifadəçilər, qruplar və icazələr idarə edən plagin arxa uçuna əsaslanır.

Əsas komponentlər:

  • İstifadəçilər: django.contrib.auth.models.User modeli istifadəçilər haqqında məlumat saxlayır (ad, hash-lənmiş şifrə, email və s.).
  • Qruplar: django.contrib.auth.models.Group modeli istifadəçiləri qruplaşdırır, icazələrin idarə olunmasını sadələşdirmək üçün.
  • İcazələr: django.contrib.auth.models.Permission modeli istifadəçinin nə edə biləcəyini müəyyən edir (modelləri baxmaq, əlavə etmək, dəyişdirmək, silmək).
  • Autentifikasiya arxa uçları: authenticate, get_user, has_perm, has_module_perms metodlarını həyata keçirən sinflər. Standart olaraq django.contrib.auth.backends.ModelBackend istifadə olunur.

Autentifikasiya prosesi:

  1. İstifadəçi giriş və şifrə göndərir (adətən forma vasitəsilə).
  2. Django konfiqurasiya olunmuş arxa uçların authenticate() metodunu çağırır və məlumatları ötürür.
  3. Arxa uç istifadəçini login əsasında axtarır.
  4. Əgər istifadəçi tapılırsa, şifrə yoxlanır (hash-ləri müqayisə etməklə).
  5. Uğurlu yoxlamadan sonra, authenticate() istifadəçi obyektini qaytarır.
  6. Django login()-u çağırır (görünüş və ya middleware-də), bu da istifadəçi üçün sessiyanı qurur.

Görünüşdə istifadə üçün nümunə:

# views.py
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect

def login_view(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(request, username=username, password=password)

        if user is not None:
            login(request, user)
            return redirect('some_success_page')
        else:
            # Autentifikasiya xətasının işlənməsi
            pass
    return render(request, 'login.html')

Əsas funksiyalar və dekoratorlar:

  • @login_required: İstifadəçinin autentifikasiyasını tələb edən görünüşlər üçün dekorator.
  • @permission_required('app_label.permission_code'): Müəyyən icazəni tələb edən dekorator.
  • user.is_authenticated: İstifadəçinin autentifikasiya olunub-olunmadığını yoxlayır.
  • user.has_perm('app_label.permission_code'): İstifadəçinin müəyyən icazəyə sahib olub-olmadığını yoxlayır.
  • user.has_module_perms('app_label'): İstifadəçinin modul üçün icazələri olub-olmadığını yoxlayır.

Quruluş:

  • AUTHENTICATION_BACKENDS: Qeydiyyatdan keçmiş arxa uçların siyahısı. Standart: ['django.contrib.auth.backends.ModelBackend'].
  • LOGIN_URL: @login_required istifadə edildikdə, qeyri-autentifikasiya olunmuş istifadəçilər üçün yönləndiriləcək URL.
  • LOGIN_REDIRECT_URL: Uğurlu girişdən sonra yönləndiriləcək URL.