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()(в изглед или middleware), който установява сесия за потребителя.
Пример за използване в изглед:
# 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_REDIRECT_URL: URL за пренасочване след успешно влизане.