Der Django-Custom-Handler 404 zeigt 404, gibt aber den Header 200 an

7

Ich habe einen benutzerdefinierten Handler404 für eine authentifizierte Django-Website erstellt, um Informationslecks zu vermeiden.

%Vor%

Funktionell macht es genau das, was ich will. Die 404-Rückgabeseite hat jedoch einen Status 200, der vom Code her korrekt ist. Aber das muss offensichtlich ein 404-Return-Status sein.

Ein Raise404 funktioniert nicht, weil es, wenn es nicht in einer unendlichen Rekursion endet, hier zurückkommt und somit zum selben Problem führt.

Ich habe versucht, eine HttpResponseNotFound, aber das nimmt nur eine Zeichenfolge als Argument und nicht eine Vorlage, die nicht zu DRY-ish.

Und ich habe manuell versucht, den Header mit:

zu setzen %Vor%

Dann ist der Status-Header tatsächlich gesetzt, aber der Browser zeigt immer noch eine 200 an.

Ich habe keine Optionen mehr. Jeder, der Tipps hat, sei bitte mein Held ...:)

Danke und Grüße,

Gerard.

Bearbeiten : Ich habe versucht, den Statusfeldwert in jeder Art BTW, aber kein Glück: (

    
GerardJP 28.11.2009, 12:56
quelle

6 Antworten

20

Ich würde render_to_string und HttpResponseNotFound , z return HttpResponseNotFound(render_to_string('404.html')) .

    
Cat Plus Plus 28.11.2009, 13:08
quelle
12

Ich habe endlich gefunden, warum der zurückgegebene Statuscode nicht funktioniert hat. Anstatt eine Header-Nachricht zu setzen, ist es einfach:

%Vor%

Dennoch gewinnt der von PiotrLegnica vorgeschlagene Code definitiv an Einfachheit, Lesbarkeit und Schönheit. Das Abzeichen steht immer noch;)

Grüße,

Gerard.

    
GerardJP 28.11.2009 15:37
quelle
7

Basierend auf den obigen Vorschlägen, hier ist meine kurze Version von 404, 500 Handlern:

%Vor%     
alex_koval 02.08.2013 05:54
quelle
2

Warum benutzen Sie nicht einfach die Ausnahme Http404?

%Vor%

Das sollte für Sie in Ordnung sein.

    
gruszczy 28.11.2009 16:08
quelle
1

Sie könnten etwas wie das folgende Beispiel tun.

Fügen Sie in die URLs Ihrer Anwendung Folgendes hinzu:

%Vor%

Fügen Sie in Ihrer Anwendung sviews.py hinzu:

%Vor%

Das Geheimnis liegt in der letzten Zeile: status = 404

Ich hoffe, es hat geholfen!

Ich freue mich darauf, die Beiträge der Community zu diesem Ansatz zu sehen. =)

    
Fabio Nolasco 26.04.2013 14:11
quelle
1

Sie können render method verwenden:

%Vor%
  

Gibt eine HttpResponse zurück, deren Inhalt mit dem Ergebnis von gefüllt ist   Aufruf von django.template.loader.render_to_string () mit dem übergebenen   Argumente.

     

Verwendet standardmäßig einen RequestContext.

Beispiel:

%Vor%

Und mit Schlüsselwörtern:

%Vor%     
Omid Raha 02.02.2015 21:38
quelle

Tags und Links