Функция get_user
Функция get_user применяется для получения объекта пользователя
по идентификатору (user ID) из запроса или сессии. Она принимает
объект запроса и возвращает объект пользователя, если он найден,
или экземпляр AnonymousUser, если пользователь не авторизован
или не существует. Функция автоматически обрабатывает кеширование
пользователя в сессии для оптимизации производительности.
Это удобный способ получения текущего пользователя в представлениях,
если вы не используете стандартный middleware, либо при работе
с пользовательскими сессиями.
Синтаксис
get_user(request)
Параметры
Функция принимает один обязательный параметр:
-
request- объект HTTP-запроса Django, содержащий информацию о сессии и пользователе. Обычно это объект, передаваемый в представление.
Возвращаемое значение
Функция возвращает объект пользователя (экземпляр модели User),
если пользователь авторизован и его идентификатор найден в сессии.
В противном случае возвращается объект AnonymousUser.
Пример . Использование в представлении
Давайте получим текущего пользователя с помощью get_user
в представлении и выведем его имя:
from django.contrib.auth import get_user
from django.http import HttpResponse
def my_view(request):
user = get_user(request)
if user.is_authenticated:
return HttpResponse(f"Hello, {user.username}!")
return HttpResponse("Hello, Guest!")
Результат выполнения кода при авторизованном пользователе:
"Hello, john_doe!"
Результат выполнения кода для неавторизованного пользователя:
"Hello, Guest!"
Пример . С проверкой прав доступа
Рассмотрим пример, где мы проверяем права пользователя на основе его роли:
from django.contrib.auth import get_user
from django.http import HttpResponse, HttpResponseForbidden
def dashboard_view(request):
user = get_user(request)
if user.is_authenticated and user.is_staff:
return HttpResponse("Welcome to admin dashboard!")
return HttpResponseForbidden("Access denied")
Результат выполнения кода для администратора:
"Welcome to admin dashboard!"
Результат выполнения кода для обычного пользователя:
"Access denied"
Пример . С использованием в шаблоне
Функцию get_user можно вызывать в представлении
и передавать результат в контекст шаблона:
from django.contrib.auth import get_user
from django.shortcuts import render
def profile_view(request):
user = get_user(request)
context = {
'user': user,
'is_admin': user.is_superuser if user.is_authenticated else False,
}
return render(request, 'profile.html', context)
Затем в шаблоне можно использовать переданные данные:
<h1>User Profile</h1>
<p>Username: {{ user.username }}</p>
<p>Email: {{ user.email }}</p>
{% if is_admin %}
<p>You have admin privileges</p>
{% endif %}
Пример . Работа с сессией
Функция get_user также может быть полезна при работе
с кастомной аутентификацией, когда идентификатор пользователя
хранится в сессии вручную:
from django.contrib.auth import get_user
from django.contrib.auth import login
from django.shortcuts import redirect
def custom_login_view(request):
user_id = request.session.get('custom_user_id')
if user_id:
user = get_user(request)
if user.is_authenticated:
login(request, user)
return redirect('dashboard')
return redirect('login')
Смотрите также
-
функция
authenticate,
которая выполняет аутентификацию пользователя -
функция
login,
которая выполняет вход пользователя в систему -
функция
get_user_model,
которая возвращает кастомную модель пользователя -
функция
logout,
которая выполняет выход пользователя из системы