django缓存不更新

时间:2013-10-10 08:18:03

标签: python django caching

我的django数据库有一个模式名称照片。并且View有一个方法get_photos会列出所有照片。并有一个upload_photo来将照片添加到表格。

问题在于说。

  1. 现在我有5张照片,我打电话给get_photos会返回一张包含5张照片的列表。
  2. 我上传照片并成功
  3. 我打电话给get_photos,我有时会返回5张照片,有时还会拍6张照片。
  4. 我重新启动django服务器。我总会得到6张照片。
  5. 我该如何解决这个问题。谢谢 。

    bellow是get_all_photos的视图方法

    @csrf_exempt
    def photos(request):
        if request.method == 'POST':
            start_index = request.POST['start_index']
        else:
            start_index = request.GET['start_index']
    
        start_index=int(start_index.strip())
        photos_count = Photo.objects.all().count()
    
        allphotos = Photo.objects.all().order_by('-publish_time')[start_index: start_index+photo_page_step]
    
        retJson = {}
        retJson["code"]=200 #ok
    
        data = {}
        data["count"]=photos_count
        photos = []
        for p in allphotos:
            photo = json_entity.from_photo(p,True);
            photos.append(photo)
        data["photos"]=photos
        retJson["data"]=data
    
        return HttpResponse(simplejson.dumps(retJson), mimetype="application/json")
    

1 个答案:

答案 0 :(得分:0)

我想你可以在这里做几件事。首先,您可以将@never_cache装饰器添加到get_photos视图中:

from django.views.decorators.cache import never_cache

@never_cache
def get_photos(request):
    ...

这永远不会缓存可能适合您情况的页面。或者,您可以缓存照片,然后在上传新照片时使缓存失效:

from django.core.cache import cache

def get_photos(request):
    photos = cache.get('my_cache_key')
    if not photos:
        # get photos here
        cache.set('my_cache_key', photos)
    ....



def upload_photo(request):
    # save photo logic here
    cache.set('my_cache_key', None) # this will reset the cache

可能是never_cache解决方案已经足够但我想将上面的内容作为提示包括在内:)