#django
Вопрос:
У меня есть корзина, в которой у меня есть два поля, которые я использую для подключения к пользователю. Во-первых User
, я использую это, если пользователь вошел в систему. Во-вторых session
, это используется для отслеживания пользователей, вышедших из системы. Он использует session_key
.
Теперь проблема, с которой я сталкиваюсь, заключается в том, что, когда пользователь входит в корзину, она отключается из-за session_key
изменений. Я знаю, что могу использовать файлы cookie для идентификации браузера или клиента. Но я не могу найти пример использования Django set_cookies
с JsonResponse(вызов AJAX). Это только для HttpResponse.
Я думаю, что мог бы использовать любой из этих двух способов, если это возможно.
- Установите файл cookie с помощью AJAX
- Или устанавливайте файлы cookie, когда пользователь посещает веб-сайт. Я хочу, чтобы это обеспечивало возможность того, что независимо от того, какую страницу посещает пользователь, файл cookie должен быть установлен при этом посещении.
У кого-нибудь есть ресурс или пример для достижения этой цели?
Спасибо
Ответ №1:
Отвечаю на свой собственный вопрос на случай, если это может кому-то помочь.
Я пошел с пунктом № 2, упомянутым в моем вопросе. Что мне было нужно, так это Middleware
. Они позволяют нам вводить данные request
и response
объекты для наших представлений.
Во myproject/cart/middleware.py
мне есть это:
from . import settings as cart_settings
import uuid
class SetCartSessionKeyMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
cart_key = request.COOKIES.get(cart_settings.CART_SESSION_ID_KEY, None)
if cart_key:
response = self.get_response(request)
else:
cart_id = str(uuid.uuid4())
response = self.get_response(request)
response.set_cookie(cart_settings.CART_SESSION_ID_KEY, cart_id)
return response
В моем settings.py
у меня есть:
CART_SESSION_ID_KEY = 'user_cart_id'
Теперь вы можете получить доступ к этому файлу cookie в любом месте, где у вас есть доступ к request
объекту, например, в ваших представлениях. Вы можете сделать session_id = request.COOKIES.get(cart_settings.CART_SESSION_ID_KEY, None)
Не забудьте импортировать настройки в представления, как вы это сделали в middleware.py
файле. Помните, что это мое приложение settings.py(т. е. myproject/cart/settings.py
) не основной проект settings.py.
В вашем myproject/settings.py
реестре ваше новое промежуточное программное обеспечение выглядит следующим образом
MIDDLEWARE = [
'django.middleware.gzip.GZipMiddleware',
....
## Our custom middlewares
'cart.middleware.SetCartSessionKeyMiddleware',
]
Наслаждайтесь!