簡體   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