繁体   English   中英

在Django Mezzanine中,如何防止在page_processor上缓存?

[英]In Django Mezzanine, how to I prevent caching on a page_processor?

通过以下内容,我创建了一个用于处理发布请求的页面。

夹层4.2.3 Django 1.10.8 Python 2.7.10 PostgreSQL 9.6.3达尔文17.4.0

这是我的专页的models.py

from mezzanine.pages.models import Page
from django.db import models

class MyCustomPage(Page):
    a_field = models.CharField(max_length=100)

这是我的Page的page_processors.py

from django.views.decorators.cache import never_cache
from django.contrib import messages
from .forms import MyCustomForm
from .utils import do_something_specific
from .models import MyCustomPage
from mezzanine.pages.page_processors import processor_for
from django.shortcuts import redirect


@never_cache
@processor_for(MyCustomPage)
def my_custom_page(request, page):

    if request.method == "POST":
        form = MyCustomForm(request.POST)

        if form.is_valid():
            do_something_specific(form.cleaned_data)
            messages.success(request, "Your post request was a success!")
            return redirect(page.get_absolute_url())

        else:
            return {
                "form": form,
            }

    else:  # is GET request
        return {
            "form": MyCustomForm(),
        }

@never_cache装饰器似乎阻止python代码被缓存,但是模板被缓存。 意思是,如果我发布到url,它将调用do_something_specific(form.cleaned_data) ,并且会发生这种情况,甚至似乎设置了messages.success 但是,当我下次在页面上进行常规的get请求时,它将使用缓存的模板,并且messages.success消息就会出现。

对于它的价值,我使用redis作为我的缓存后端。 我使用的是memcached,但得到的结果完全相同。 我将缓存用于应用程序的不同部分。 另外,我对缓存非常熟悉。 我在所有应用程序中都经常使用它。 这似乎与Mezzanines缓存有关。

理想情况下,我只想完全禁用夹层的缓存,并且仅缓存我明确告诉其进行缓存的内容,没有别的。

更新:

@iamkhush是的,使用redis-server monitor我可以验证密钥是否相同。 这是我的工作。 清除缓存。 RUNSERVER。 在浏览器中获取URL。 缓存不存在,因此它将呈现模板并将其设置在缓存中。 然后,我填写表格并发布。 page_processor运行我的“ if POST”块中的所有代码。 然后,它进入缓存并使用存在的密钥进行GET。 因此,它无需重新渲染模板,而是获取缓存中的所有内容,因此成功消息不会进入模板。 我刷新几次,它获取了相同的密钥。 因此,我清除了缓存,运行服务器,访问了url,没有缓存,因此呈现了模板,并且它接收到成功消息,然后将html设置在缓存中。 如果刷新(重新获取)URL,它将从缓存中检索模板。

我认为这是因为中间件mezzanine.core.middleware.FetchFromCacheMiddlewaremezzanine.core.middleware.UpdateCacheMiddleware

在此处进行检查-http: //mezzanine.jupo.org/docs/caching-strategy.html#cache-middleware

您应该删除这些以获得预期的结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM