Viele Ressourcen haben Fehlerseiten gerendert, wenn eine Anfrage von einem Client nicht verarbeitet werden kann.
Zunächst hat die Site die häufigsten Fehler angepasst, andere sind beim Debuggen noch nicht aufgetreten, aber alles steht bevor.
Wie im Titel des Artikels angekündigt, wurden die folgenden Fehler angepasst:
1.403 - Autorisierungsfehler, Zugriff wird verweigert.
2.404 - Seite nicht gefunden;
3.500 - Interner Serverfehler;
Anpassung der Fehler 404, 500
Um 404- und 500-Fehler anzupassen, müssen Sie Anforderungshandler schreiben, und Sie müssen nur ihre Darstellungen als Methode schreiben.
Wir fügen den Vorlagen unsere angepassten HTML-Dateien hinzu, das heißt:
- error404.html
- error500.html
Das Modul, in dem die Ansichten für diese Site implementiert sind, ist home Vorlagen für die benutzerdefinierten Fehler werden in den Vorlagen des gleichen Moduls platziert.
Überschreiben Sie in der Datei urls.py des Haupt-Site-Moduls die Standardhandler:
- handler404
- handler500
Im Code sieht das so aus:
from home.views import e_handler404, e_handler500 handler404 = e_handler404 handler500 = e_handler500
Beschreiben wir die Ansichten in der views.py Datei des home: Moduls
from django.shortcuts import render_to_response from django.template import RequestContext def e_handler404(request): context = RequestContext(request) response = render_to_response('error404.html', context) response.status_code = 404 return response def e_handler500(request): context = RequestContext(request) response = render_to_response('error500.html', context) response.status_code = 500 return response
Anpassungsfehler 403
Ein 403-Fehler tritt auf, wenn ein nicht autorisierter Benutzer versucht, auf den Teil der Site zuzugreifen, auf den nur autorisierte Benutzer zugreifen dürfen.
In Django wird dies erreicht, indem der Status des Benutzers überprüft und den Seiten ein schützendes Token hinzugefügt wird, der CSRF-Mechanismus. Dieser Fehler kann auch dann auftreten, wenn der Benutzer autorisiert ist, führt jedoch Aktionen aus, die eine Überprüfung des CSRF erfordern Token und das Token selbst wurde verloren oder ist nicht wahr. Tatsache ist, dass Sie der Vorlage in den Formularen ein spezielles Tag hinzufügen müssen, damit das Token ordnungsgemäß funktioniert:
{% csrf_token %}
Darin wird ein Token eingefügt, aber das einfache Hinzufügen zur Vorlage reicht nicht aus. Bevor Sie mit dem Rendern der Vorlage beginnen, müssen Sie dem Kontext, der an die Vorlage übergeben wird, ein Token hinzufügen. Also,
from django.template.context_processors import csrf from django.shortcuts import render_to_response def any_request(request): context = {} context.update(csrf(request)) ... return render_to_response('any_request.html', context=context)
Nun, jetzt näher an der Anpassung selbst. Damit csrf funktioniert, muss das csrf-Modul der Datei settings.py hinzugefügt und eine Ansicht angegeben werden, die diesen Fehler behandelt:
MIDDLEWARE = [ ... 'django.middleware.csrf.CsrfViewMiddleware', ... ] CSRF_FAILURE_VIEW = 'home.views.csrf_failure'
Fügen Sie in den Vorlagen error403.html hinzu, und in der Datei views.py den View-Handler.
def csrf_failure(request, reason=""): context = RequestContext(request) response = render_to_response('error403.html', context) response.status_code = 403 return response
Für Django empfehle ich Timeweb Hosting VDS Server .
Супер, очень полезно!