Middle
225
Djangoда аутентификация системасы кандай иштейт?
AIден жооп
sobes.tech AI
Django'da doğrulama, kullanıcılar, gruplar ve izinleri işleyen bağlamaya bağlı bir arka uç üzerine kuruludur.
Ana bileşenler:
- Kullanıcılar:
django.contrib.auth.models.Usermodeli, kullanıcılar hakkında bilgileri tutar (isim, hashlenmiş şifre, e-posta vb.). - Gruplar:
django.contrib.auth.models.Groupmodeli, izinleri yönetmeyi kolaylaştırmak için kullanıcıları bir araya getirir. - İzinler:
django.contrib.auth.models.Permissionmodeli, kullanıcının ne yapabileceğini belirler (görme, ekleme, düzenleme, modelleri silme). - Kimlik Doğrulama Arka Uçları: Kimlik doğrulama (
authenticate) ve yetkilendirme (get_user,has_perm,has_module_perms) metodlarını uygulayan sınıflar. Varsayılan olarakdjango.contrib.auth.backends.ModelBackendkullanılır.
Kimlik doğrulama süreci:
- Kullanıcı giriş bilgilerini (genellikle form aracılığıyla) gönderir.
- Django, yapılandırılmış arka uçların
authenticate()metodunu çağırır ve kimlik bilgilerini iletir. - Arka uç, kullanıcıyı giriş bilgileriyle arar.
- Kullanıcı bulunursa, arka uç şifreyi kontrol eder (hashleri karşılaştırarak).
- Başarılı kontrol durumunda,
authenticate()kullanıcı nesnesini döner. - Django,
login()fonksiyonunu çağırır (görünüm veya ara katman), bu da kullanıcının oturumunu ayarlar.
Görünümde kullanım örneği:
# 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:
# Kimlik doğrulama hatası işleme
pass
return render(request, 'login.html')
Kimlik doğrulama ve izinleri kontrol etmek için temel fonksiyonlar ve dekoratörler:
@login_required: Kullanıcı doğrulaması gerektiren görünüm dekoratörü.@permission_required('app_label.permission_code'): Belirli bir izne ihtiyaç duyan görünüm dekoratörü.user.is_authenticated: Kullanıcının doğrulanıp doğrulanmadığını kontrol eder.user.has_perm('app_label.permission_code'): Kullanıcının belirli bir izne sahip olup olmadığını kontrol eder.user.has_module_perms('app_label'): Kullanıcının belirli bir uygulamadaki modüle izinleri olup olmadığını kontrol eder.
Ayarlar:
AUTHENTICATION_BACKENDS: Kayıtlı arka uçların listesi. Varsayılan:['django.contrib.auth.backends.ModelBackend'].LOGIN_URL:@login_requiredkullanıldığında giriş yapmamış kullanıcılar için yönlendirme URL'si.LOGIN_REDIRECT_URL: Başarılı giriş sonrası yönlendirme URL'si.