0

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

问题是说。

  1. 现在我有 5 张照片,我调用 get_photos 将返回一个包含 5 张照片的列表。
  2. 我上传照片并成功
  3. 我打电话给 get_photos,我有时会返回 5 张照片,有时会返回 6 张照片。
  4. 我重新启动 django 服务器。我总是会得到 6 张照片。

我该如何解决这个问题。谢谢 。

下面是 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")
4

1 回答 1

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 解决方案就足够了,但我想将上述内容作为提示:)

于 2013-10-10T08:30:04.583 回答