Django Cookies в Python — методы работы и примеры

В этом руководстве вы узнаете о файлах cookie и о том, как устанавливать и получать их в веб-приложениях Django в Python.

Содержание

Когда веб-сервер взаимодействует с множеством различных браузеров одновременно, ему необходимо определить, с какого браузера поступил конкретный запрос. Поскольку HTTP-запрос/ответ не имеет состояния, все веб-браузеры выглядят одинаково. Для идентификации веб-браузеров веб-сервер использует файлы cookie.

Технически, файлы cookie представляют собой текстовые файлы с небольшим фрагментом данных, которые веб-сервер отправляет веб-браузеру. Веб-браузер может хранить файл cookie и отправлять его обратно веб-серверу в последующих запросах.

Обратите внимание, что веб-браузер отправляет обратно только те файлы cookie, которые были изначально установлены тем же веб-сервером. Сравнивая файлы cookie, веб-сервер может определить, что запросы поступают из одного и того же веб-браузера.

У файлов cookie есть срок действия. Некоторые из них могут существовать годами, в то время как другие являются краткосрочными и истекают, как только вы закрываете веб-браузер.

Django Cookies

Django позволяет устанавливать, читать и удалять файлы cookie с помощью методов объекта HttpResponse.

Установка

Чтобы установить cookie, используйте метод set_cookie() объекта HttpResponse:

set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None

В этом методе:

  • key — это имя cookie-файла.
  • value — это строка, представляющая значение cookie-файла.
  • max_age может быть объектом timedelta или целым числом, которое обозначает количество секунд, указывающее, как долго должен истечь срок действия cookie. По умолчанию установлено значение None, при котором срок действия cookie истекает после закрытия браузера.
  • expires должен быть либо объектом datetime в формате UTC, либо строкой в формате «Wdy, DD-Mon-YY HH:MM:SS GMT».
  • Используйте secure=True, если вы хотите, чтобы веб-браузер отправлял cookie-файлы на сервер, если запрос выполняется только по протоколу HTTPS.
  • Используйте httponly=True, если вы не хотите, чтобы клиентский JavaScript имел доступ к cookie-файлу.
  • Используйте samesite=’None'((string), чтобы разрешить отправку cookie-файлов со всеми односайтовыми и межсайтовыми запросами.

Удаление

Чтобы удалить cookie, используйте метод delete_cookie() объекта HttpResponse:

delete_cookie(key, path='/', domain=None, samesite=None)

Метод delete_cookie() удаляет cookie с указанным именем. Он завершается молчаливым сбоем, если ключ не существует.

Обратите внимание, что путь и домен должны иметь те же значения, которые вы использовали в методе set_cookie(), иначе файл cookie не будет удален.

Чтобы получить доступ ко всем файлам cookie, отправленным веб-браузером, используйте свойство COOKIES объекта HttpRequest.

request.COOKIES

Чтобы получить доступ к cookie по ключу, вы передаете имя cookie в словарь request.COOKIES. Например:

request.COOKIES['cocoa']

Если cookie-файл «cocoa» не существует, Django выдаст ошибку.

Чтобы избежать ошибки, вы можете использовать метод get() словаря, чтобы получить cookie, если он существует, или получить значение по умолчанию в противном случае. Например:

request.COOKIES.get('cocoa',1)

Код вернет 1, если cookie с именем «cocao» не существует.

Мы будем использовать cookie для хранения того, посетил ли веб-браузер сайт. Когда пользователь посещает сайт в первый раз, будет показано сообщение:

Welcome to my website!

А со второго раза он проверит cookie и покажет следующее сообщение, если cookie с именем, которое он посетил, доступен:

Welcome back!

Сначала определите новую запись в urlpatterns файла urls.py вашего приложения:

urlpatterns = [
    path('', views.home, name='home'),
]

При открытии http://127.0.0.1:8000/ Django выполнит функцию home() в файле views.py.

Во-вторых, определите функцию home() в файле views.py:

def home(request):
    visited = request.COOKIES.get('visited')
    if visited:
        response = HttpResponse('Welcome back!')
    else:
        response = HttpResponse('Welcome to my website!')
        response.set_cookie('visited', True)

    return response

В функции home() мы считываем cookie с именем visited. Если cookie с именем visited не существует, на домашней странице отобразится сообщение:

Welcome to my website!

В противном случае будет показано сообщение:

Welcome back!

Кроме того, мы устанавливаем для посещенного cookie значение True.

Если вы просмотрите файл cookie в веб-браузере, вы увидите файл cookie с именем visited следующим образом:

пример cookie django

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *