Как аннулировать кэш представления с помощью django-cacheops
У меня есть представление, и я кэшировал его в views.py используя django-cache(https://github.com/Suor/django-cacheops)
@cached_view(timeout=60*15)
@csrf_exempt
def order(request, usr):
...
и regex для представления заказа в urls.py
url(r'^order/(?P<usr>\D+)$', views.order, name='ord')
#Example Url: http://127.0.0.1:8000/order/demo (demo is the user name)
И я хочу аннулировать кэшированный порядок представления внутри нижеприведенного представления
@login_required
def available(request, pk, avail):
pk = int(pk)
avail = strtobool(avail)
if avail:
Product.objects.filter(id = pk).update(available = True)
else:
Product.objects.filter(id = pk).update(available = False)
return HttpResponseRedirect(reverse_lazy('yc'))
Согласно документации, мы можем достичь этого, выполнив
@login_required
def available(request, pk, avail):
pk = int(pk)
avail = strtobool(avail)
if avail:
Product.objects.filter(id = pk).update(available = True)
order.invalidate("http://127.0.0.1:8000/order/demo", "demo")
#it's a dummy url I've handled it dynamically in my code
else:
Product.objects.filter(id = pk).update(available = False)
order.invalidate("http://127.0.0.1:8000/order/demo", "demo")
#it's a dummy url I've handled it dynamically in my code
return HttpResponseRedirect(reverse_lazy('yc'))
Но это не работает.
Вот мои логи при использовании redis-cli
Похоже, что он удаляет какой-то другой кэш.
Я также поднял этот вопрос в репозитории django-cache
, вы можете проверить его здесь (https://github.com/Suor/django-cacheops/issues/425).
для получения дополнительной информации.
Поскольку вы использовали именованную группу usr
в вашем regex, Django передает ее как аргумент ключевого слова:
url(r'^order/(?P<usr>\D+)$', views.order, name='ord')
Но вы пытаетесь аннулировать кэш с помощью позиционного аргумента:
order.invalidate("http://127.0.0.1:8000/order/demo", "demo")
Вместо этого, сделайте его недействительным с помощью соответствующего аргумента ключевого слова:
order.invalidate("http://127.0.0.1:8000/order/demo", usr="demo")