AlexNest
@AlexNest
Работаю с Python/Django

Почему ломается сессия в django?

Создаю корзину, код примерно следующий, в которую добавляются товары через аjax-запрос
spoiler

class Cart():
    PurchaseInvoiceFirm = 'PurchaseInvoiceFirm'
    PurchaseInvoiceCart = 'PurchaseInvoiceCart'
    user = ''

    def __init__(self, request):
        self.user = request.user
        self.check_session_vars(request)

    def view_firm(self, request):
        return request.session[self.PurchaseInvoiceFirm]

    def view_cart(self, request):
        """Отображение корзины"""
        return request.session[self.PurchaseInvoiceCart]

    def add_product_to_cart(self, request, product):
        """Добавить товар в корзину"""
        cart = self.PurchaseInvoiceCart

        if product in request.session[cart]:
            request.session[cart][product]['amoung'] += 1
        else:
            request.session[cart][product] = {'amoung': 1}
   ...
    def check_session_vars(self, request):
        if not self.PurchaseInvoiceFirm in request.session or not request.session[self.PurchaseInvoiceFirm]:
            request.session[self.PurchaseInvoiceFirm] = 0

        if not self.PurchaseInvoiceCart in request.session or not request.session[self.PurchaseInvoiceCart]:
            request.session[self.PurchaseInvoiceCart] = {}


Сам ajax-запрос:
spoiler

$( document ).ready(function() {
    $('.cart_box').toggle(0);
get_cart()
	$('.cart-link').click(function(){
		$('.cart_box').toggle(400);
		return false;
	});
});

    function get_cart() {
          var token = '{{csrf_token}}';
             $.ajax({
                headers: { "X-CSRFToken": token },
                url: '/cart/',
                type: 'POST',
                success: function(data) {
                    $(".cart_box").html(data);
                    $(".full_cart").html(data)


                },
                failure: function(data) {
                    alert('Не удалось');
                }
            });
}
    function add_to_cart(id) {
        let token = '{{csrf_token}}';
        $.ajax({
            headers: { "X-CSRFToken": token },
            url: '/add-to-cart/',
            type: 'POST',
            data: {'id':id},
            success: function(data) {

                get_cart()
                console.log(data)

            },
            failure: function(data) {
                console.log('Не успешно');
            }
        });

    }

    function rem_from_cart(id) {
        let token = '{{csrf_token}}';
        $.ajax({
            headers: { "X-CSRFToken": token },
            url: '/rem-from-cart/',
            type: 'POST',
            data: {'id':id},
            success: function(data) {

                get_cart()

            },
            failure: function(data) {
                console.log('Успешно');
            }
        });

    }


ybSTrbXHwRk.jpg?size=537x164&quality=96&sign=4a7676d68fca5a4d69623daed626aadb&type=album
И вроде все работает, данные обновляются, все хорошо, но помимо этого нужно сохранять в сессию ид фирмы (очищая при этом корзину):
spoiler

def SetFirmSessionVar(self, request, firm):
        del request.session[self.PurchaseInvoiceCart]
        sessiovar = self.PurchaseInvoiceFirm
        request.session[sessiovar] = firm


И тут все ломается - сессия с корзиной больше не обновляется (даже если не удалять ее)
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
AlexNest
@AlexNest Автор вопроса
Работаю с Python/Django
Нужно было в настройках прописать:
SESSION_SAVE_EVERY_REQUEST = True

или после изменения
...
request.session.modified
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы