Функция get_user

Функция get_user применяется для получения объекта пользователя по идентификатору (user ID) из запроса или сессии. Она принимает объект запроса и возвращает объект пользователя, если он найден, или экземпляр AnonymousUser, если пользователь не авторизован или не существует. Функция автоматически обрабатывает кеширование пользователя в сессии для оптимизации производительности. Это удобный способ получения текущего пользователя в представлениях, если вы не используете стандартный middleware, либо при работе с пользовательскими сессиями.

Синтаксис

pythonget_user(request)

Параметры

Функция принимает один обязательный параметр:

Возвращаемое значение

Функция возвращает объект пользователя (экземпляр модели User), если пользователь авторизован и его идентификатор найден в сессии. В противном случае возвращается объект AnonymousUser.

Пример . Использование в представлении

Давайте получим текущего пользователя с помощью get_user в представлении и выведем его имя:

pythonfrom 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!")

Результат выполнения кода при авторизованном пользователе:

python"Hello, john_doe!"

Результат выполнения кода для неавторизованного пользователя:

python"Hello, Guest!"

Пример . С проверкой прав доступа

Рассмотрим пример, где мы проверяем права пользователя на основе его роли:

pythonfrom 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")

Результат выполнения кода для администратора:

python"Welcome to admin dashboard!"

Результат выполнения кода для обычного пользователя:

python"Access denied"

Пример . С использованием в шаблоне

Функцию get_user можно вызывать в представлении и передавать результат в контекст шаблона:

pythonfrom 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)

Затем в шаблоне можно использовать переданные данные:

html<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 также может быть полезна при работе с кастомной аутентификацией, когда идентификатор пользователя хранится в сессии вручную:

pythonfrom 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,
    которая выполняет выход пользователя из системы