Django — Попытка отслеживать корзину пользователя

#django

Вопрос:

У меня есть корзина, в которой у меня есть два поля, которые я использую для подключения к пользователю. Во-первых User , я использую это, если пользователь вошел в систему. Во-вторых session , это используется для отслеживания пользователей, вышедших из системы. Он использует session_key .

Теперь проблема, с которой я сталкиваюсь, заключается в том, что, когда пользователь входит в корзину, она отключается из-за session_key изменений. Я знаю, что могу использовать файлы cookie для идентификации браузера или клиента. Но я не могу найти пример использования Django set_cookies с JsonResponse(вызов AJAX). Это только для HttpResponse.

Я думаю, что мог бы использовать любой из этих двух способов, если это возможно.

  1. Установите файл cookie с помощью AJAX
  2. Или устанавливайте файлы 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',
]
 

Наслаждайтесь!