2017-04-25 3 views
1

Meiner Meinung nach verwende ich oft as_view() von APIView, um json zu generieren.DRF, Caching für as_view()?

Ich möchte die Antwort auf Cache und versucht, die folgenden, aber es wird

def some_complex_view(self, request, *args, **kwargs): 
    pass 

@method_decorator(cache_page(60, key_prefix='drf')) 
def dispatch(self, request, *args, **kwargs): 
    return super().dispatch(request, *args, **kwargs) 

Dann nicht, ich

def my_view(request, *args, **kwargs): 
    json_data = MyViewSet.as_view({'get': 'some_complex_view'})(request, format='json') 

    data = { 
     'my_data': json_data 
    } 
    return render(request, 'my_template.html', data) 

nennen es richtig Caches, wenn ich die Ansicht mit Browser-Anfrage , aber es wird nicht bei der Verwendung von as_view()

+1

Wie konstruieren Sie die Anfrage, wenn Sie die Ansicht direkt aufrufen? – knbk

+0

Was ist deine Django-Version? –

+0

@knbk: Ich bin in der Django-View-Funktion und es hat die "Anfrage" – eugene

Antwort

1

es gibt ein paar Strategien in den CBV docs aufgeführt sind:

In

den Dekorateur in Ihrem urls.py Route, zum Beispiel login_required(ViewSpaceIndex.as_view(..)) Dekorieren Sie Ihre CBV Depesche Methode mit einem method_decorator zB

from django.utils.decorators import method_decorator 

@method_decorator(login_required, name='dispatch') 
class MyViewSet(TemplateView): 
    template_name = 'secret.html' 

Bevor Django 1.9 Sie nicht method_decorator auf die Klasse verwenden, so müssen Sie überschreiben Sie die Versandmethode:

class MyViewSet(TemplateView): 

    @method_decorator(login_required) 
    def dispatch(self, *args, **kwargs): 
     return super(MyViewSet, self).dispatch(*args, **kwargs) 
+0

ja, es funktioniert, wenn ich die URL vom Browser (Netzwerk) anfordern, aber es wird nicht, wenn ich die View-Methode direkt mit 'as_view()' aufrufen. – eugene