Bei der Implementierung von Klassenbasierte Ansicht in Django werden get und post gemeinsam verarbeitet. Ich wollte, also habe ich es umgesetzt.
Wenn eine Anfrage vorliegt, ob get oder post, dispatch () Wird über .View.dispatch aufgerufen. Also habe ich dispatch () mit method_decorator verpackt.
def some_decorator(dispatch):
def wrapper(request, *args, **kwargs):
# ...Etwas übliche Verarbeitung
return dispatch(request, *args, **kwargs)
return wrapper
@method_decorator(some_decorator, name='dispatch')
class MyView(View):
def get(self, request, *args, **kwargs):
return HttpResponse('Hello, World!')
Wenn es wie ein einfaches Zugriffsprotokoll aussieht, sollten Sie [Middleware] implementieren (https://docs.djangoproject.com/ja/1.11/topics/http/middleware/). Ich wollte jedoch sicherstellen, dass die Middleware ausgeführt wurde, und ich wollte nur eine bestimmte Ansicht protokollieren.
Wenn Sie es wirklich nur mit einer bestimmten (einzelnen) Ansicht implementieren möchten, können Sie es überschreiben. Bei der Implementierung von View handelt es sich jedoch tatsächlich um TemplateView, ListView, DetailView, ModelViewSet des Django-Rest-Frameworks. Daher wollte ich eine gemeinsame Verarbeitung mit ihnen implementieren.
Django==1.11
Recommended Posts