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.
ავტორიზაციის პროცესი:
- მომხმარებელი აგზავნის შესვლის მონაცემებს (სাধარაოდ ფორმის მეშვეობით).
- Django იძახის
authenticate()მეთოდს კონფიგურირებულ ბექენდებზე, მონაცემებს გადასცემს. - ბექენდმა ეძებს მომხმარებელს მონაცემებით.
- თუ მომხმარებელი იპოვეს, ბექენდმა გადაამოწმებს პაროლს (ჰეშების შედარებით).
- წარმატების შემთხვევაში,
authenticate()აბრუნებს მომხმარებლის ობიექტს. - 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, სადაც მოხდება გადამისამართება წარმატებული შესვლის შემდეგ.