Кэшированные данные препятствуют обновлению в шаблоне django - PullRequest
0 голосов
/ 29 января 2020

Я работаю с django сеансом с использованием конфигурации кэшированного сеанса . Мой объект сеанса содержит значение, которое при обновлении не отражается на моей веб-странице, пока я не использую жесткую ссылку браузера sh.

any help or suggestion will be greatly appreciated ( actually my first time working with session and cache directly )

A Быстрый аналог:

Перед обновлением count = 0 и после обновления count = 1

значение счетчика сохраняется в объекте сеанса django

request.session['counter'] = count

проблема

вместо отображения 1 в моем шаблоне (HTML), вместо этого я получаю 0 . Это верно, если я не сделаю жесткую ссылку sh в моем браузере (Cntrl + r), которая будет обновлять только текущую страницу, но на всех других страницах будет сохранено предыдущее значение счетчика, равное 0

МОЙ КОД

Просмотр, который обрабатывает обновление

def increment_quantity(request):
    quantity = int(request.POST.get('quantity'))
    item_id = int(request.POST.get('item_id'))
    item = get_object_or_404(Product, id=item_id)

    if quantity < 1:
        quantity = 1
    item.quantity = quantity
    item.save()

    if request.session.get('product_present', False):
        # if a product is present
        product = Product.objects.get(pk=int(request.session['product_id']))
        request.session['product_count'] = product.get_total_item()

    products = get_all_products(request)
    return redirect('product:product_list')

Решение переполнения стека, которое я пробовал

ссылка одна

ссылка две

Что я пробовал лично

I ' Мы пытались использовать промежуточное ПО, которое вызывается для каждой цепочки запросов и ответов. На этом промежуточном программном обеспечении я установил для объекта сеанса значение, которое когда-либо учитывалось во время запроса / ответа.

Код

class ProductMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if request.session.get('product_present', False):
             # if a product is present
             product = Product.objects.get(pk=int(request.session['product_id']))
             request.session['product_count'] = product.get_total_item()

        request.session.modified = True
        return self.get_response(request)

И это моя установка промежуточного программного обеспечения settings.py

MIDDLEWARE = [
    .....
    .....

    'django.contrib.sessions.middleware.SessionMiddleware',
    'product.middleware.CartMiddleware',
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',

    .....
    .....
]

У меня есть пользовательское среднее значение до UpdateCacheMiddleware и FetchFromCacheMiddleware (я думал, что если объект сеанса изменяется, то когда вызывается UpdateCacheMiddleware, он должен заметить изменения и затем обновляет себя, что, в свою очередь, заставляет FetchFromCacheMiddleware получить обновленную версию кэша) в цепочке запросов и ответов, но проблема остается.

Помогите пожалуйста

1 Ответ

0 голосов
/ 29 января 2020

Мне просто нужно было удалить из своего промежуточного ПО

    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',

После этого мне больше не нужно обновлять sh мой браузер, чтобы увидеть обновленное значение. Благодаря @BBQ на django сервере раздора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...