MiddlewareLink to this heading
Detta dokument förklarar alla middleware-komponenter som medföljer Django. För information om hur du använder dem och hur du skriver din egen middleware, se middleware usage guide.
Tillgänglig middlewareLink to this heading
Middleware för cacheminneLink to this heading
- class UpdateCacheMiddlewareLink to this definition
- class FetchFromCacheMiddlewareLink to this definition
Aktivera den webbplatsomfattande cacheminnet. Om dessa är aktiverade kommer varje Django-driven sida att cachas så länge som inställningen CACHE_MIDDLEWARE_SECONDS definierar. Se cache-dokumentation.
”Vanlig” mellanprogramvaraLink to this heading
- class CommonMiddlewareLink to this definition
- response_redirect_classLink to this definition
Standardvärde för
HttpResponsePermanentRedirect. UnderklassCommonMiddlewareoch åsidosätt attributet för att anpassa de omdirigeringar som utfärdas av mellanvaran.
Lägger till några bekvämligheter för perfektionister:
Förbjuder åtkomst till användaragenter i inställningen
DISALLOWED_USER_AGENTS, som bör vara en lista över kompilerade objekt med reguljära uttryck.Utför URL-omskrivning baserat på inställningarna
APPEND_SLASHochPREPEND_WWW.Om
APPEND_SLASHärTrueoch den ursprungliga URL:en inte slutar med ett snedstreck, och den inte finns i URLconf, så bildas en ny URL genom att lägga till ett snedstreck i slutet. Om denna nya URL finns i URLconf, omdirigerar Django begäran till denna nya URL. I annat fall behandlas den ursprungliga URL:en som vanligt.Till exempel: kommer
foo.com/baratt omdirigeras tillfoo.com/bar/om du inte har ett giltigt URL-mönster förfoo.com/barmen har ett giltigt mönster förfoo.com/bar/.Om
PREPEND_WWWärTruekommer webbadresser som saknar ett inledande ”www.” att omdirigeras till samma webbadress med ett inledande ”www.”Båda dessa alternativ är avsedda att normalisera webbadresser. Filosofin är att varje URL ska finnas på en och endast en plats. Tekniskt sett skiljer sig en URL
foo.com/barfrånfoo.com/bar/- en sökmotors indexerare skulle behandla dem som separata URL:er - så det är bästa praxis att normalisera URL:er.Om det behövs kan enskilda vyer uteslutas från
APPEND_SLASH-beteendet med hjälp avno_append_slash()decorator:from django.views.decorators.common import no_append_slash @no_append_slash def sensitive_fbv(request, *args, **kwargs): """View to be excluded from APPEND_SLASH.""" return HttpResponse()Ställer in rubriken
Content-Lengthför svar som inte strömmas.
- class BrokenLinkEmailsMiddlewareLink to this definition
Skickar e-postmeddelanden om trasiga länkar till
MANAGERS(se Hur man hanterar felrapportering).
GZip mellanprogramLink to this heading
- class GZipMiddlewareLink to this definition
- max_random_bytesLink to this definition
Standardvärde är 100. Underklassa
GZipMiddlewareoch åsidosätt attributet för att ändra det maximala antalet slumpmässiga byte som ingår i komprimerade svar.
django.middleware.gzip.GZipMiddleware komprimerar innehåll för webbläsare som förstår GZip-komprimering (alla moderna webbläsare).
Denna middleware bör placeras före alla andra middleware som behöver läsa eller skriva svarskroppen så att komprimeringen sker efteråt.
Den komprimerar INTE innehåll om något av följande är sant:
Innehållet är mindre än 200 byte långt.
Svaret har redan ställt in rubriken
Content-Encoding.Begäran (webbläsaren) har inte skickat ett
Accept-Encoding-huvud som innehållergzip.
Om svaret har en ETag header, görs ETag svag för att följa RFC 9110 Section 8.8.1.
Du kan tillämpa GZip-komprimering på enskilda vyer med hjälp av gzip_page()-dekoratorn.
Villkorlig GET-mellanvaraLink to this heading
- class ConditionalGetMiddlewareLink to this definition
Hanterar villkorliga GET-operationer. Om svaret inte har någon ETag-rubrik lägger mellanvaran till en vid behov. Om svaret har en ETag eller Last-Modified header, och begäran har If-None-Match eller If-Modified-Since, ersätts svaret av en HttpResponseNotModified.
Du kan hantera villkorliga GET-operationer med enskilda vyer med hjälp av conditional_page()-dekoratorn.
Middleware för lokal språkdräktLink to this heading
- class LocaleMiddlewareLink to this definition
- response_redirect_classLink to this definition
Standardvärde för
HttpResponseRedirect. UnderklassaLocaleMiddlewareoch åsidosätt attributet för att anpassa de omdirigeringar som utfärdas av mellanvaran.
Möjliggör språkval baserat på data från begäran. Det anpassar innehållet för varje användare. Se dokumentation om internationalisering.
Middleware för meddelandenLink to this heading
- class MessageMiddlewareLink to this definition
Aktiverar cookie- och sessionsbaserat meddelandestöd. Se meddelanden dokumentation.
Middleware för säkerhetLink to this heading
- class SecurityMiddlewareLink to this definition
django.middleware.security.SecurityMiddleware ger flera säkerhetsförbättringar till request/response-cykeln. Var och en kan aktiveras eller inaktiveras oberoende av varandra med en inställning.
HTTP Strict Transport SecurityLink to this heading
För webbplatser som endast bör nås via HTTPS kan du instruera moderna webbläsare att vägra ansluta till ditt domännamn via en osäker anslutning (under en viss tidsperiod) genom att ställa in rubriken ”Strict-Transport-Security”. Detta minskar din exponering för vissa SSL-strippande MITM-attacker (man-in-the-middle).
SecurityMiddleware kommer att ställa in detta huvud åt dig på alla HTTPS-svar om du ställer in SECURE_HSTS_SECONDS till ett heltal som inte är noll.
När du aktiverar HSTS är det en bra idé att först använda ett litet värde för testning, t.ex. SECURE_HSTS_SECONDS = 3600 för en timme. Varje gång en webbläsare ser HSTS-rubriken från din webbplats kommer den att vägra att kommunicera på ett icke-säkert sätt (med HTTP) med din domän under den angivna tidsperioden. När du har bekräftat att alla tillgångar serveras säkert på din webbplats (dvs. att HSTS inte förstörde något) är det en bra idé att öka detta värde så att besökare som kommer sällan skyddas (31536000 sekunder, dvs. 1 år, är vanligt).
Om du dessutom anger inställningen SECURE_HSTS_INCLUDE_SUBDOMAINS till True, kommer SecurityMiddleware att lägga till direktivet includeSubDomains i Strict-Transport-Security-headern. Detta rekommenderas (förutsatt att alla underdomäner serveras uteslutande med HTTPS), annars kan din webbplats fortfarande vara sårbar via en osäker anslutning till en underdomän.
Om du vill lägga till din webbplats i listan över förinlästa sidor i webbläsaren ska du ställa in SECURE_HSTS_PRELOAD på True. Då läggs direktivet preload till i rubriken Strict-Transport-Security.
Policy för hänvisareLink to this heading
Webbläsare använder Referer-headern som ett sätt att skicka information till en webbplats om hur användarna kom dit. När en användare klickar på en länk skickar webbläsaren hela webbadressen till den länkande sidan som referent. Detta kan vara användbart för vissa ändamål - som att ta reda på vem som länkar till din webbplats - men det kan också orsaka integritetsproblem genom att informera en webbplats om att en användare har besökt en annan webbplats.
Vissa webbläsare har möjlighet att acceptera tips om huruvida de ska skicka HTTP-rubriken ”Referer” när en användare klickar på en länk; detta tips tillhandahålls via rubriken ”Referrer-Policy”. Detta huvud kan föreslå något av tre beteenden för webbläsare:
Full URL: skicka hela URL:en i rubriken
Referer. Om användaren t.ex. besökerhttps://example.com/page.html, skulleReferer-headern innehålla"https://example.com/page.html".Endast ursprung: skicka endast ”ursprunget” i referensen. Ursprunget består av schema, värd och (valfritt) portnummer. Om användaren t.ex. besöker
https://example.com/page.html, skulle ursprunget varahttps://example.com/.Ingen referrer: skicka inte någon
Refererheader alls.
Det finns två typer av tillstånd som denna rubrik kan tala om för en webbläsare att se upp med:
Samma ursprung kontra korsande ursprung: en länk från
https://example.com/1.htmltillhttps://example.com/2.htmlär samma ursprung. En länk frånhttps://example.com/page.htmltillhttps://not.example.com/page.htmlär cross-origin.Protokollnedgradering: en nedgradering sker om sidan som innehåller länken serveras via HTTPS, men sidan som länkas till inte serveras via HTTPS.
SecurityMiddleware kan ställa in rubriken Referrer-Policy åt dig, baserat på inställningen SECURE_REFERRER_POLICY (notera stavning: webbläsare skickar en rubrik Referer när en användare klickar på en länk, men rubriken som instruerar en webbläsare om att göra det stavas Referrer-Policy). De giltiga värdena för denna inställning är:
Ingen hänvisareAnvisar webbläsaren att inte skicka någon referent för länkar som klickas på denna webbplats.
- ”Ingen hänvisning vid nedgradering” (no-referrer-when-downgrade)
Instruerar webbläsaren att skicka en fullständig URL som referent, men endast när ingen protokollnedgradering sker.
ursprungInstruerar webbläsaren att endast skicka ursprunget, inte hela URL:en, som referent.
ursprung-när-korsat-ursprungInstruerar webbläsaren att skicka hela URL:en som referent för länkar med samma ursprung, och endast ursprunget för länkar med olika ursprung.
Samma ursprungAnvisar webbläsaren att skicka en fullständig URL, men endast för länkar med samma ursprung. Ingen referrer kommer att skickas för länkar med korsande ursprung.
strict-originInstruerar webbläsaren att endast skicka ursprunget, inte hela URL:en, och att inte skicka någon referent när en protokollnedgradering inträffar.
- ”begränsa ursprunget när det korsas
Instruerar webbläsaren att skicka hela URL:en när länken är av samma ursprung och ingen protokollnedgradering sker; skicka endast ursprunget när länken är av korsande ursprung och ingen protokollnedgradering sker; och ingen referent när en protokollnedgradering sker.
unsafe-urlInstruerar webbläsaren att alltid skicka den fullständiga URL:en som referent.
Policy för öppnare för flera ursprungLink to this heading
Vissa webbläsare har möjlighet att isolera toppnivåfönster från andra dokument genom att placera dem i en separat webbläsarkontextgrupp baserat på värdet i rubriken COOP (Cross-Origin Opener Policy). Om ett dokument som är isolerat på detta sätt öppnar ett popup-fönster med flera ursprung, kommer popup-fönstrets egenskap window.opener att vara null. Att isolera fönster med hjälp av COOP är ett djupförsvarsskydd mot cross-origin-attacker, särskilt sådana som Spectre som möjliggjorde exfiltrering av data som laddats in i en delad webbläsarkontext.
SecurityMiddleware kan ställa in rubriken Cross-Origin-Opener-Policy åt dig, baserat på inställningen SECURE_CROSS_ORIGIN_OPENER_POLICY. De giltiga värdena för denna inställning är:
Samma ursprungIsolerar bläddringskontexten uteslutande till dokument med samma ursprung. Dokument med olika ursprung läses inte in i samma bläddringskontext. Detta är standardalternativet och det säkraste alternativet.
- samma-ursprung-tillåt-popups
Isolerar bläddringskontexten till dokument med samma ursprung eller sådana som antingen inte anger COOP eller som väljer bort isolering genom att ange en COOP på
unsafe-none.unsafe-noneTillåter att dokumentet läggs till i öppnarens bläddringskontextgrupp om inte öppnaren själv har en COOP av
samme-originellersamme-origin-allow-popups.
X-Content-Type-Options: nosniffLink to this heading
Vissa webbläsare försöker gissa innehållstyperna för de tillgångar som de hämtar och åsidosätter rubriken Content-Type. Även om detta kan hjälpa till att visa webbplatser med felaktigt konfigurerade servrar, kan det också utgöra en säkerhetsrisk.
Om din webbplats serverar filer som laddats upp av användare kan en illvillig användare ladda upp en särskilt utformad fil som tolkas som HTML eller JavaScript av webbläsaren när du förväntade dig att det skulle vara något ofarligt.
För att förhindra webbläsaren från att gissa innehållstypen och tvinga den att alltid använda den typ som anges i Content-Type-huvudet, kan du skicka `X-Content-Type-Options: nosniff`__-huvudet. SecurityMiddleware kommer att göra detta för alla svar om inställningen SECURE_CONTENT_TYPE_NOSNIFF` är True.
Observera att i de flesta distributionssituationer där Django inte är inblandad i att servera filer som laddats upp av användaren, kommer den här inställningen inte att hjälpa dig. Till exempel:, om din MEDIA_URL serveras direkt av din front-end webbserver (nginx, Apache, etc.) så skulle du vilja ställa in den här rubriken där. Å andra sidan, om du använder Django för att göra något som att kräva auktorisering för att ladda ner filer och du inte kan ställa in rubriken med din webbserver, kommer den här inställningen att vara användbar.
SSL-omdirigeringLink to this heading
Om din webbplats erbjuder både HTTP- och HTTPS-anslutningar kommer de flesta användare att hamna på en osäker anslutning som standard. För bästa säkerhet bör du omdirigera alla HTTP-anslutningar till HTTPS.
Om du sätter inställningen SECURE_SSL_REDIRECT till True kommer SecurityMiddleware att permanent (HTTP 301) omdirigera alla HTTP-anslutningar till HTTPS.
Om inställningen SECURE_SSL_HOST har ett värde kommer alla omdirigeringar att skickas till den värden i stället för till den ursprungligen begärda värden.
Om det finns några sidor på din webbplats som ska vara tillgängliga via HTTP och inte omdirigeras till HTTPS kan du lista reguljära uttryck för att matcha dessa webbadresser i inställningen SECURE_REDIRECT_EXEMPT.
Mellanprogram för sessionerLink to this heading
- class SessionMiddlewareLink to this definition
Aktiverar stöd för sessioner. Se session-dokumentation.
Middleware för webbplatsenLink to this heading
- class CurrentSiteMiddlewareLink to this definition
Lägger till attributet site som representerar den aktuella webbplatsen till varje inkommande HttpRequest-objekt. Se sites dokumentation.
Middleware för autentiseringLink to this heading
- class AuthenticationMiddlewareLink to this definition
Lägger till attributet user, som representerar den inloggade användaren, till varje inkommande HttpRequest-objekt. Se Autenticering i webbförfrågningar.
- class LoginRequiredMiddlewareLink to this definition
Subklassa mellanvaran och åsidosätt följande attribut och metoder för att anpassa beteendet för oautentiserade begäranden.
- redirect_field_nameLink to this definition
Standardvärdet är
"next".
- get_login_url()Link to this definition
Returnerar URL:en som oautentiserade förfrågningar kommer att omdirigeras till. Detta resultat är antingen
login_urlsom ställts in pålogin_required()decorator (om inteNone), ellersettings.LOGIN_URL.
- get_redirect_field_name()Link to this definition
Returnerar namnet på den frågeparameter som innehåller den URL som användaren ska omdirigeras till efter en lyckad inloggning. Detta resultat är antingen
redirect_field_namesom ställts in pålogin_required()decorator (om inteNone), ellerredirect_field_name. OmNonereturneras kommer ingen frågeparameter att läggas till.
Omdirigerar alla oautentiserade förfrågningar till en inloggningssida, utom för vyer som utesluts med login_not_required(). Inloggningssidan är som standard settings.LOGIN_URL, men kan anpassas.
Aktivera denna middleware genom att lägga till den i inställningen MIDDLEWARE after AuthenticationMiddleware:
MIDDLEWARE = [
"...",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.auth.middleware.LoginRequiredMiddleware",
"...",
]
Gör en vy publik och tillåt oautentiserade förfrågningar med login_not_required(). Till exempel:
from django.contrib.auth.decorators import login_not_required
@login_not_required
def contact_us(request): ...
Anpassa inloggningsadressen eller fältnamnet för autentiserade vyer med login_required() decorator för att ställa in login_url respektive redirect_field_name. Till exempel:
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic import View
@login_required(login_url="/books/login/", redirect_field_name="redirect_to")
def book_dashboard(request): ...
@method_decorator(
login_required(login_url="/books/login/", redirect_field_name="redirect_to"),
name="dispatch",
)
class BookMetrics(View):
pass
- class RemoteUserMiddlewareLink to this definition
Middleware för att använda autentisering som tillhandahålls av webbservern. Se Hur man autentiserar med hjälp av REMOTE_USER för användningsdetaljer.
- class PersistentRemoteUserMiddlewareLink to this definition
Middleware för att använda autentisering som tillhandahålls av webbservern när den endast är aktiverad på inloggningssidan. Se Använda REMOTE_USER endast på inloggningssidor för användningsdetaljer.
Middleware för CSRF-skyddLink to this heading
- class CsrfViewMiddlewareLink to this definition
Lägger till skydd mot Cross Site Request Forgeries genom att lägga till dolda formulärfält i POST-formulär och kontrollera förfrågningar om rätt värde. Se Dokumentation om skydd mot Cross Site Request Forgery.
Du kan lägga till skydd mot Cross Site Request Forgery för enskilda vyer med hjälp av csrf_protect()-dekoratorn.
X-Frame-Options middlewareLink to this heading
- class XFrameOptionsMiddlewareLink to this definition
Beställning av mellanprogramvaraLink to this heading
Här är några tips om ordningen för olika Django middleware-klasser:
-
Den bör ligga högst upp på listan om du ska aktivera SSL-omdirigeringen eftersom du då slipper köra igenom en massa andra onödiga mellanprogram.
-
Före de som ändrar
Vary-headern (SessionMiddleware,GZipMiddleware,LocaleMiddleware). -
Före alla mellanprogram som kan ändra eller använda svarskroppen.
Efter
UpdateCacheMiddleware: Ändrar rubrikenVary. -
Innan någon middleware som kan ge upphov till ett undantag utlöser en felvy (t.ex.
PermissionDenied) om du använderCSRF_USE_SESSIONS.Efter
UpdateCacheMiddleware: Ändrar rubrikenVary. -
Innan någon middleware som kan ändra svaret (den sätter
ETag-headern).Efter
GZipMiddlewareså att den inte beräknar enETagheader på gzippat innehåll. -
En av de översta, efter
SessionMiddleware(använder sessionsdata) ochUpdateCacheMiddleware(ändrarVaryheader). -
Före alla mellanprogram som kan ändra svaret (det anger rubriken
Content-Length). En middleware som visas föreCommonMiddlewareoch ändrar svaret måste återställaContent-Length.Nära toppen: den omdirigerar när
APPEND_SLASHellerPREPEND_WWWär inställda påTrue.Efter
SessionMiddlewareom du använderCSRF_USE_SESSIONS. -
Innan någon vy middleware som förutsätter att CSRF-attacker har hanterats.
Före
RemoteUserMiddleware, eller någon annan autentiseringsmellanvara som kan utföra en inloggning, och därmed rotera CSRF-token, innan den anropar vidare i mellanvarukedjan.Efter
SessionMiddlewareom du använderCSRF_USE_SESSIONS. -
Efter
SessionMiddleware: använder sessionslagring. -
Efter
AuthenticationMiddleware: använder användarobjekt. -
Efter
SessionMiddleware: kan använda sessionsbaserad lagring. -
Efter alla mellanprogram som ändrar rubriken
Vary: den rubriken används för att välja ett värde för cachens hash-nyckel. -
Borde ligga längst ner eftersom det är en sista utväg för mellanprogram.
-
Borde ligga längst ner eftersom det är en sista utväg för mellanprogram.