Атрибут session
Атрибут session класса HttpRequest предоставляет доступ к сессионным данным текущего пользователя. Сессия представляет собой словареподобный объект, который позволяет сохранять и извлекать данные между разными запросами одного пользователя. Данные сессии хранятся на сервере, а клиенту передается идентификатор сессии в виде cookie. Атрибут доступен только в том случае, если в приложении включено middleware для сессий.
Синтаксис
request.session[key] = value
value = request.session.get(key, default)
del request.session[key]
Пример
Давайте сохраним количество посещений страницы пользователем:
from django.http import HttpResponse
def counter_view(request):
# Увеличиваем счетчик посещений
request.session['visits'] = request.session.get('visits', 0) + 1
return HttpResponse(f"Visits: {request.session['visits']}")
Результат выполнения кода:
"Visits: 1"
"Visits: 2"
"Visits: 3"
Пример
Давайте сохраним корзину покупок пользователя в сессии:
from 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)})
Результат выполнения кода:
{"cart": [1, 2, 3], "count": 3}
Пример
Давайте проверим, вошел ли пользователь в систему с помощью сессии:
from 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}")
Результат выполнения кода:
"Logged in: True"
"Login successful"