2015-10-29 16 views
7

Ich bin ein wenig verwirrt auf process_request und process_view.django Middleware Unterschied zwischen process_request und process_view

Prozessanforderung ist etwas, das Sie mit Anforderung weitergeben möchten. Beispiel kann aus request.user entnommen werden.

Was macht dann process_view? Ist es zum Ausführen einer Ansicht zunächst vor dem Aufruf einer URL? Wie anfangs möchte ich Home View zeigen, aber dies kann auch von der URL aus erfolgen.

Kann mir jemand ein Beispiel geben, wenn ich process_view verwenden soll?

Danke

Antwort

9

process_request aufgerufen wird, bevor Django legt fest, welche Ansicht die Anfrage behandeln soll (daher ist es nur Parameter ist die request).

process_view wird aufgerufen, nachdem Django bestimmt, welche Ansicht die Anfrage behandelt, aber bevor diese Ansicht aufgerufen wird. Es hat Zugriff auf das Objekt request, zusammen mit der Ansicht, die es behandelt, und den Parametern, die an diese Ansicht übergeben werden.

Wenn Sie die Ansicht benötigen, die für eine Anfrage verwendet wird, können Sie process_view verwenden. Ein gutes Beispiel dafür ist Django's CSRF Middleware process_view, der CSRF-Schutz wird nicht geltend machen, wenn ein csrf_exempt Dekorateur auf der Ansicht vorhanden ist, wird die Anforderung bedeutet für:

def process_view(self, request, callback, callback_args, callback_kwargs): 
    [...] 

    if getattr(callback, 'csrf_exempt', False): 
     return None 

    [...] 
0

Adrian Ghiuta hat eine sehr gute Antwort geschrieben. Ich möchte nur einige Punkte hinzufügen.

process_request wird vor dem URL-Matching aufgerufen und process_view wird nach URL-Matching aufgerufen, aber vor dem Aufruf dieser Ansicht.

Wir können die process_request verwenden, um die URL selbst zu ändern und somit eine andere Ansicht aufzurufen. Dieser Punkt half mir, diese zu verstehen, also dachte ich mir, es zu beantworten, vielleicht wird es auch jemand anderes.

Verwandte Themen