3

djangoのキャッシュでweeeeeeirdの動作が発生しています。ページを更新すると、同じ値が何度も取得されます(これは、ビューがヒットするたびにインクリメントされることになっているintです)。ただし、同じユーザー名/ passwdを使用して別のブラウザにログインすると、番号が増加しますが、再度ログインするまで増加しません。ログアウトしたこともありません。ページを開いたままにして、別のブラウザからログインしただけです。

編集: URLを変更するたびに増分します(たとえば、同じビューにとどまるようにスラッシュを追加します)ブラウザのキャッシュはおそらく無効になっています。

編集2:今では非常に奇妙です:ビューにデコレータを追加した後、別のブラウザで新しいページを開くと、更新のたびに機能し始めました@never_cacheが、apache / wsgiに戻すと、再び機能しなくなりました(はい、再起動しました) apache)。

編集3:今すぐapacheでランダムに作業を開始しました...しかし、Chromeでは、URLを末尾/に設定すると、xが更新される前の数値に戻ります。しかし、私がトレーリングでクロムでリフレッシュすると/、それは増加し続けます。これはブラウザまたはApacheキャッシュでしょうか?

コードを表示:

from django.core.cache import cache

if cache.get('counter') != None:#0 needs to let this pass
    cache.incr('counter')
else:
    cache.set('counter', 0)
return HttpResponse(cache.get('counter')) 

関連する設定:

 MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',          #cache middleware
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',)      #cache middleware

CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
CACHES = {'default':{
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211', #this is the default port for memcache
        'TIMEOUT': '1800' #30 Minutes
        }
    }

私はこの質問を注意深く監視して、私の問題に関する詳細情報の要求がないか確認します。そのため、コメントはすぐに回答されます。

行動を説明するために使用できるのは写真だけです。

4

1 に答える 1

1

あなたMIDDLEWARE_CLASSESが持っているdjango.middleware.cache.UpdateCacheMiddlewaredjango.middleware.cache.FetchFromCacheMiddlewareページキャッシング用です。そのため、@never_cacheデコレータを使用すると動作が消えるのがわかりました。

これらのページがまだキャッシュ内にあるため、奇妙なスラッシュ/スラッシュなしの問題が発生している可能性があります(デコレータがキャッシュ部分からのフェッチと対話するかどうかは100%わかりません)。

キャッシュをフラッシュするか、テストのためにミドルウェアを取り出して再試行すると、期待どおりの一貫した増分が表示されると思います。

于 2012-12-06T22:51:16.697 に答える