Sobes.tech
Middle

როგორ მუშაობს Django-ს ავტორიზაციის სისტემა?

sobes.tech AI

პასუხი AI-სგან

Django-ში ავტორიზაცია დაფუძნებულია დაკავშირებულ ბექენდზე, რომელიც მართავს მომხმარებლებს, ჯგუფებს და დაშვებებს.

ძირითადი კომპონენტები:

  • მომხმარებლები: მოდელი django.contrib.auth.models.User ინახავს ინფორმაციას მომხმარებლების შესახებ (სახელი, ჰეშირებული პაროლი, ელფოსტა და სხვა).
  • ჯგუფები: მოდელი django.contrib.auth.models.Group აერთიანებს მომხმარებლებს დაშვებების გამარტივებისთვის.
  • დაშვებები: მოდელი django.contrib.auth.models.Permission განსაზღვრავს, რა არის დაშვებული მომხმარებელს (დათვალიერება, დამატება, რედაქტირება, მოდელების წაშლა).
  • ავტორიზაციის ბექენდები: კლასები, რომლებიც ახორციელებენ ავტორიზაციის მეთოდებს (authenticate) და დაშვებებს (get_user, has_perm, has_module_perms). ნაგულისხმევად გამოიყენება django.contrib.auth.backends.ModelBackend.

ავტორიზაციის პროცესი:

  1. მომხმარებელი აგზავნის შესვლის მონაცემებს (სাধარაოდ ფორმის მეშვეობით).
  2. Django იძახის authenticate() მეთოდს კონფიგურირებულ ბექენდებზე, მონაცემებს გადასცემს.
  3. ბექენდმა ეძებს მომხმარებელს მონაცემებით.
  4. თუ მომხმარებელი იპოვეს, ბექენდმა გადაამოწმებს პაროლს (ჰეშების შედარებით).
  5. წარმატების შემთხვევაში, authenticate() აბრუნებს მომხმარებლის ობიექტს.
  6. Django იძახის login() (ნახვში ან შუა ფენაში), რომელიც ადგენს სესიას მომხმარებლისთვის.

გამოყენების მაგალითი ნახვაში:

# 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:
            # ავტორიზაციის შეცდომის დამუშავება
            pass
    return render(request, 'login.html')

ძირითადი ფუნქციები და დეკორატორები ავტორიზაციის და დაშვებების შემოწმებისთვის:

  • @login_required: დეკორატორი, რომელიც საჭიროებს ავტორიზებულ მომხმარებელს.
  • @permission_required('app_label.permission_code'): დეკორატორი, რომელიც საჭიროებს კონკრეტულ დაშვებას.
  • user.is_authenticated: შემოწმება, არის თუ არა მომხმარებელი ავტორიზებული.
  • user.has_perm('app_label.permission_code'): შემოწმება, აქვს თუ არა მომხმარებელს კონკრეტული დაშვება.
  • user.has_module_perms('app_label'): შემოწმება, აქვს თუ არა მომხმარებელს დაშვება მოდულზე.

კონფიგურაცია:

  • AUTHENTICATION_BACKENDS: რეგისტრირებული ბექენდების სია. ნაგულისხმევი: ['django.contrib.auth.backends.ModelBackend'].
  • LOGIN_URL: URL, სადაც გადამისამართდება ავტორიზებული არყოფილი მომხმარებელი @login_required გამოყენებისას.
  • LOGIN_REDIRECT_URL: URL, სადაც მოხდება გადამისამართება წარმატებული შესვლის შემდეგ.