1

私のdjangoアプリでは、ログインしたユーザーがEntry次の属性を持つを作成できます

from django.db import models
from datetime import date
from django.contrib.auth.models import User 
class Entry(models.Model):
    creationdate=models.DateField(default=date.today)
    description=models.TextField()
    author=models.ForeignKey(User,null=True)

私の見解では、ユーザーはEntry特定の日付のすべてを次のように取得できます。

def entries_on_ a_day(request,year,month,day):
    #month as 'jan','feb' etc
    ...
    entries_for_date = Entry.objects.filter(creationdate__year=year,creationdate__month=get_month_as_number(month),creationdate__day=day,author=request.user).order_by('-creationdate')
    ...

cacheこれで、ユーザーが1日にsのリストを表示するたびにデータベースヒットを実行する代わりに、これを使用する必要がありEntryます。キャッシュのキーをどのように設定すればよいですか?username+creationdateキーとして作成された文字列を使用する必要がありますか?

from django.core.cache import cache

def entries_on_ a_day(request,year,month,day):
    creationdate=new date(year,get_month_as_number(month),day)
    key = request.user.username+ str(creationdate)
    if key not in cache:
        entries_for_date = Entry.objects.filter(creationdate__year=year,creationdate__month=get_month_as_number(month),creationdate__day=day,author=request.user).order_by('-creationdate')
        cache.set(key,entries_for_date)
    entries =  cache.get(key)
    ....
4

1 に答える 1

2

はい、あなたは正しい考えを持っています。一般的な原則として、キャッシュ キーは、異なる結果を生成するクエリごとに異なる必要があるということです。creationdateここでは、クエリはとのみに依存するrequest.userため、両方がキーに含まれている限り、設定は完了です。

ただし、この関数がキャッシュを使用するために生成するキーが、Django デプロイメントの他の部分で使用されるキーと異なることも確認する必要があります。したがって、ある種の名前空間も含める必要があります。たとえば、これに似たもの:

"per-day-entries-{0}-{1}".format(request.user.username, creationdate)
于 2012-11-10T07:00:54.983 に答える