[PYTHON] Allgemeine Verarbeitung bei der Anforderung einer klassenbasierten Ansicht

Bei der Implementierung von Klassenbasierte Ansicht in Django werden get und post gemeinsam verarbeitet. Ich wollte, also habe ich es umgesetzt.

Implementierung

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!')

Ist es nicht gut mit Middleware?

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.

Sollte ich View nicht erweitern und den Versand überschreiben?

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.

Ausführung

Django==1.11

Recommended Posts

Allgemeine Verarbeitung bei der Anforderung einer klassenbasierten Ansicht
Django klassenbasierte Ansicht
Dinge, die Sie bei der Verarbeitung von Zeichenfolgen in Python2 beachten sollten
Dinge, die Sie bei der Verarbeitung von Zeichenfolgen in Python 3 beachten sollten
Berücksichtigen Sie bei der Verarbeitung von DynamoDB Stream mit Lambda (Python) die allgemeine Vorverarbeitung.
Wovon ich süchtig war, als der Processing-Benutzer zu Python wechselte