Кэш-функция или представление?

Я хочу использовать django-rest-framework с кэшем.

@cache_page(10 * 60)
@api_view(['GET'])
def get_num(request):
    if request.method == "GET":
        res = ["ok"]
        return Response(res)

Хорошо работает.

На самом деле я хочу кэшировать не view, а function

@cache_page(10 * 60)
def getCalc(num):
    return num * 10


@api_view(['GET'])
def get_num(request):
    if request.method == "GET":
        res = getCalc(request.query_params.get('num'))
        return Response(res)

Приходит ошибка TypeError: _wrapped_view() missing 1 required positional argument: 'request'

Можно ли использовать кэш для function???

вы можете использовать cachetools

@cachetools.func.ttl_cache(maxsize=10,ttl=10*6)
def getCalc(num):
    return num * 10

maxsize зависит от ваших требований.

вы можете добавить запрос к параметрам функции:

@cache_page(10 * 60)
def getCalc(request, num):
    return num * 10


@api_view(['GET'])
def get_num(request):
    if request.method == "GET":
        res = getCalc(request, request.query_params.get('num'))
        return Response(res)
Вернуться на верх