Middle
Ako funguje systém overovania v Django?
sobes.tech AI
Odpoveď od AI
V Django je overovanie založené na pripojenom backendu, ktorý spracováva používateľov, skupiny a oprávnenia.
Hlavné komponenty:
- Používatelia: Model
django.contrib.auth.models.Useruchováva informácie o používateľoch (meno, hashované heslo, email atď.). - Skupiny: Model
django.contrib.auth.models.Groupzdružuje používateľov na zjednodušenie správy oprávnení. - Oprávnenia: Model
django.contrib.auth.models.Permissionurčuje, čo je používateľovi povolené robiť (prehliadať, pridávať, upravovať, mazať modely). - Backendy na overovanie: Triedy implementujúce metódy na overovanie (
authenticate) a autorizáciu (get_user,has_perm,has_module_perms). Predvolene sa používadjango.contrib.auth.backends.ModelBackend.
Proces overovania:
- Používateľ odošle prihlasovacie údaje (zvyčajne cez formulár).
- Django volá metódu
authenticate()nakonfigurovaných backendov s odovzdanými údajmi. - Backend hľadá používateľa podľa prihlasovacích údajov.
- Ak je používateľ nájdený, backend overí heslo (porovnaním hashov).
- V prípade úspešnej kontroly
authenticate()vráti objekt používateľa. - Django volá
login()(vo view alebo middleware), ktorý nastaví reláciu pre používateľa.
Príklad použitia vo view:
# 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:
# Spracovanie chyby overovania
pass
return render(request, 'login.html')
Hlavné funkcie a dekorátory na kontrolu overovania a oprávnení:
@login_required: Dekorátor pre view, ktorý vyžaduje overeného používateľa.@permission_required('app_label.permission_code'): Dekorátor pre view, ktorý vyžaduje špecifické oprávnenie.user.is_authenticated: Kontrola, či je používateľ overený.user.has_perm('app_label.permission_code'): Kontrola, či má používateľ konkrétne oprávnenie.user.has_module_perms('app_label'): Kontrola, či má používateľ oprávnenia na modul v určitej aplikácii.
Nastavenie:
AUTHENTICATION_BACKENDS: Zoznam registrovaných backendov. Predvolene:['django.contrib.auth.backends.ModelBackend'].LOGIN_URL: URL pre presmerovanie neautentifikovaných používateľov pri použití@login_required.LOGIN_REDIRECT_URL: URL pre presmerovanie po úspešnom prihlásení.