Я работаю с 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
получить обновленную версию кэша) в цепочке запросов и ответов, но проблема остается.
Помогите пожалуйста