Атрибут session

Атрибут session класса HttpRequest предоставляет доступ к сессионным данным текущего пользователя. Сессия представляет собой словареподобный объект, который позволяет сохранять и извлекать данные между разными запросами одного пользователя. Данные сессии хранятся на сервере, а клиенту передается идентификатор сессии в виде cookie. Атрибут доступен только в том случае, если в приложении включено middleware для сессий.

Синтаксис

pythonrequest.session[key] = value
value = request.session.get(key, default)
del request.session[key]

Пример

Давайте сохраним количество посещений страницы пользователем:

pythonfrom django.http import HttpResponse

def counter_view(request):
  # Увеличиваем счетчик посещений
  request.session['visits'] = request.session.get('visits', 0) + 1
  return HttpResponse(f"Visits: {request.session['visits']}")

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

python"Visits: 1"
"Visits: 2"
"Visits: 3"

Пример

Давайте сохраним корзину покупок пользователя в сессии:

pythonfrom django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json

@csrf_exempt
def cart_view(request):
  if request.method == 'POST':
    data = json.loads(request.body)
    product_id = data.get('product_id')
    
    # Получаем корзину из сессии
    cart = request.session.get('cart', [])
    cart.append(product_id)
    request.session['cart'] = cart
    
    return JsonResponse({'status': 'added'})
  
  # GET запрос - возвращаем корзину
  cart = request.session.get('cart', [])
  return JsonResponse({'cart': cart, 'count': len(cart)})

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

python{"cart": [1, 2, 3], "count": 3}

Пример

Давайте проверим, вошел ли пользователь в систему с помощью сессии:

pythonfrom django.http import HttpResponse
from django.contrib.auth import authenticate, login

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)
      request.session['user_logged'] = True
      request.session['username'] = username
      return HttpResponse("Login successful")
    else:
      return HttpResponse("Invalid credentials")
  
  # Проверяем статус входа
  is_logged = request.session.get('user_logged', False)
  return HttpResponse(f"Logged in: {is_logged}")

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

python"Logged in: True"
"Login successful"

Смотрите также

  • атрибут user,
    который предоставляет доступ к объекту пользователя в запросе
  • атрибут COOKIES,
    который содержит все cookie-файлы, отправленные клиентом
  • атрибут GET,
    который содержит все GET-параметры запроса
  • атрибут POST,
    который содержит все POST-параметры запроса