【问题标题】:Redis in django-rest-framework in get methoddjango-rest-framework 中的 Redis 在 get 方法中
【发布时间】:2018-03-12 10:19:03
【问题描述】:

我在 django restframe 工作中使用 redis 并在 get 方法中遇到问题

我用不同的键为多个用户保存数据

@api_view(['GET'])
def abc(request):
    key  = request.META['HTTP_KEY']

    if  cache.get(key) == None:
        print('create a cache and return data ');
        cache.set(key,key,timeout =100)
        return JsonResponse({'data': cache.get(key) })
    else:
        print('return data from cache')
        return JsonResponse({'data': cache.get(key) })

它第一次创建缓存并返回数据,当我下次使用不同的键时,它将返回相同的数据事件,它不执行 if else 条件/不打印打印命令。我想它会创建 url 基础缓存,如何解决这个问题?

我第一次按“a”键,它返回 me = a 并打印“创建缓存并返回数据”

下次我使用键 b 时,它会返回旧数据“a”而不打印任何行“创建缓存并返回数据”/“从缓存中返回数据”

【问题讨论】:

  • 首先,JsonResponse 是纯 django,与 DRF 无关。其次,您可能没有粘贴代码的相关部分。你的全景图是什么样的?
  • 当我发送不同的密钥时,我的问题很简单。为什么我得到与我第一次在缓存中设置的结果相同的结果。这仅在“获取”方法中发生。如果我更改 get to post 那么它将正常工作。
  • 这段代码 sn-p 不应该与 POST 一起工作(你应该得到一个 405),也不应该在没有 print 语句的情况下返回任何东西。您是否在设置中设置了 FetchFromCacheMiddleware ?如果是这样,您将不得不使用可变标头 (docs.djangoproject.com/en/2.0/topics/cache/#using-vary-headers)

标签: caching redis get django-rest-framework


【解决方案1】:

使用这个

from django.views.decorators.vary import vary_on_headers

@vary_on_headers('key')

'key' 请在此处提及您的标题键

Using Very header

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2014-07-01
    • 2018-07-13
    • 1970-01-01
    • 2020-10-28
    • 2018-12-22
    相关资源
    最近更新 更多