# Django 6.0.5 documentation

# Ramverk för systemkontroll

Ramverket System Check är en uppsättning statiska kontroller för validering av Django-projekt. Det upptäcker vanliga problem och ger tips om hur man åtgärdar dem. Ramverket är utbyggbart så att du enkelt kan lägga till dina egna kontroller.

För detaljer om hur du lägger till dina egna kontroller och integrerar dem med Djangos systemkontroller, se Systemcheck topic guide.

## API-referens

### `CheckMessage`

class CheckMessage(level, msg, hint=None, obj=None, id=None)

De varningar och fel som systemkontroller ger upphov till måste vara instanser av `CheckMessage`. En instans inkapslar ett enda rapporterbart fel eller en varning. Den innehåller också sammanhang och tips som gäller för meddelandet samt en unik identifierare som används för filtrering.

Konstruktörens argument är:

`nivå`

  Meddelandets allvarlighetsgrad. Använd ett av de fördefinierade värdena: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`. Om nivån är större eller lika med `ERROR`, kommer Django att förhindra att hanteringskommandon utförs. Meddelanden med en lägre nivå än `ERROR` (dvs. varningar) rapporteras till konsolen, men kan tystas ner.

`msg`

  En kort (mindre än 80 tecken) sträng som beskriver problemet. Strängen ska inte innehålla nya rader.

`hint`

  En sträng på en rad som ger en ledtråd för att lösa problemet. Om ingen ledtråd kan anges, eller om ledtråden framgår av felmeddelandet, kan ledtråden utelämnas eller värdet `None` användas.

`obj`

  Valfritt. Ett objekt som ger sammanhang åt meddelandet (t.ex. den modell där problemet upptäcktes). Objektet bör vara en modell, ett fält eller en manager eller något annat objekt som definierar en `__str__()`-metod. Metoden används vid rapportering av alla meddelanden och dess resultat föregår meddelandet.

`id`

  Valfri sträng. En unik identifierare för problemet. Identifierare bör följa mönstret `applabel.X001`, där `X` är en av bokstäverna `CEWID`, som anger meddelandets allvarlighetsgrad (`C` för kritiskt, `E` för fel och så vidare). Numret kan tilldelas av applikationen, men bör vara unikt inom den applikationen.

Det finns underklasser för att göra det enklare att skapa meddelanden med gemensamma nivåer. När du använder dem kan du utelämna argumentet `level` eftersom det är underförstått av klassnamnet.

class Debug(msg, hint=None, obj=None, id=None)

class Info(msg, hint=None, obj=None, id=None)

class Warning(msg, hint=None, obj=None, id=None)

class Error(msg, hint=None, obj=None, id=None)

class Critical(msg, hint=None, obj=None, id=None)

## Inbyggda taggar

Djangos systemkontroller är organiserade med hjälp av följande taggar:

- `admin`: Kontroll av eventuella deklarationer för administratörswebbplatser.

- `async_support`: Kontrollerar asynkronrelaterad konfiguration.

- `caches`: Kontrollerar cache-relaterad konfiguration.

- `kompatibilitet`: Flaggar för potentiella problem med versionsuppgraderingar.

- `kommandon`: Kontrollerar konfiguration relaterad till anpassade hanteringskommandon.

- `databas`: Kontrollerar databasrelaterade konfigurationsfrågor. Databaskontroller körs inte som standard eftersom de gör mer än statisk kodanalys som vanliga kontroller gör. De körs endast av kommandot `migrate` eller om du anger konfigurerade databasalias med alternativet `--database` när du anropar kommandot `check`.

- `files`: Kontrollerar filrelaterad konfiguration.

- `modeller`: Kontroll av modell-, fält- och managerdefinitioner.

- `Säkerhet`: Kontrollerar säkerhetsrelaterad konfiguration.

- `signaler`: Kontrollerar signaldeklarationer och registreringar av handläggare.

- `sites`: Kontrollerar `django.contrib.sites`-konfigurationen.

- `staticfiles`: Kontrollerar `django.contrib.staticfiles` konfiguration.

- `mallar`: Kontrollerar mallrelaterad konfiguration.

- `översättning`: Kontrollerar översättningsrelaterad konfiguration.

- `urls`: Kontrollerar URL-konfigurationen.

Vissa kontroller kan registreras med flera taggar.

## Kontroller av kärnsystem

### Asynkront stöd

Följande kontroller verifierar din installation för Asynkront stöd:

- async.E001: Du bör inte ange miljövariabeln `DJANGO_ALLOW_ASYNC_UNSAFE` i distributionen. Detta inaktiverar async safety protection.

### Bakåtkompatibilitet

Kompatibilitetskontroller varnar för potentiella problem som kan uppstå efter uppgradering av Django.

- 2_0.W001: Ditt URL-mönster `<pattern>` har en `route` som innehåller `(?P<`, börjar med `^`, eller slutar med `$`. Detta var troligen ett förbiseende när vi migrerade från `url()` till `path()`.

- 4_0.E001: Från och med Django 4.0 måste värdena i inställningen `CSRF_TRUSTED_ORIGINS` börja med ett schema (vanligtvis `http://` eller `https://`) men hittade `<hostname>`.

### Cacher

Följande kontroller verifierar att din `CACHES`-inställning är korrekt konfigurerad:

- caches.E001: Du måste definiera en `'default'` cache i din `CACHES` inställning.

- caches.W002: Din konfiguration `<cache>` kan exponera din cache eller leda till att dina data skadas eftersom dess `LOCATION` matchar/är inuti/innehåller `MEDIA_ROOT`/`STATIC_ROOT`/`STATICFILES_DIRS`.

- caches.W003: Din `<cache>` cache `LOCATION` är relativ. Använd en absolut sökväg istället.

### Databas

#### MySQL och MariaDB

Om du använder MySQL eller MariaDB kommer följande kontroller att utföras:

- mysql.E001: MySQL/MariaDB tillåter inte unika `CharField` att ha en `max_length` > 255. Denna kontroll ändrades till `mysql.W003` i Django 3.1 eftersom den verkliga maximala storleken beror på många faktorer.

- mysql.w002: MySQL/MariaDB Strict Mode är inte inställt för databasanslutningen `<alias>`. Se även Ställa in sql_mode.

- mysql.w003: MySQL/MariaDB tillåter kanske inte unika `CharField` att ha en `max_length` > 255.

### Hantera filer

Följande kontroller verifierar din inställning för Hantera filer:

- files.E001: Inställningen `FILE_UPLOAD_TEMP_DIR` hänvisar till den icke-existerande katalogen `<path>`.

### Modellfält

- fields.E001: Fältnamn får inte sluta med en understreckare.

- fields.E002: Fältnamn får inte innehålla `"__"`.

- fields.E003: `pk` är ett reserverat ord som inte kan användas som fältnamn.

- fields.E004: `choices` måste vara en mappning (t.ex. en ordbok) eller en iterabel (t.ex. en lista eller tupel).

- fields.E005: `choices` måste vara en mappning av faktiska värden till mänskligt läsbara namn eller en iterabel som innehåller `(faktiskt värde, mänskligt läsbart namn)`-tupler.

- fields.E006: `db_index` måste vara `None`, `True` eller `False`.

- fields.E007: Primärnycklar får inte ha `null=True`.

- fields.E008: Alla `validatorer` måste vara anropsbara.

- fields.E009: `max_length` är för litet för att passa det längsta värdet i `choices` (`<count>` tecken).

- fields.E010: `<field>` default bör vara en callable istället för en instans så att den inte delas mellan alla fältinstanser.

- fields.E011: `<database>` stöder inte standardvärden för databaser med uttryck (`db_default`).

- fields.E012: `<expression>` kan inte användas i `db_default`.

- fields.E013: `CompositePrimaryKey` måste ha namnet `pk`.

- fields.E100: `AutoField` måste ange primary_key=True.

- fields.E110: `BooleanField` accepterar inte null-värden. Denna kontroll dök upp innan stöd för null-värden lades till i Django 2.1.

- fields.E120: `CharField` måste definiera ett attribut för `max_length`.

- fields.E121: `max_length` måste vara ett positivt heltal.

- fields.W122: `max_length` ignoreras när det används med `<integer field type>`.

- fields.E130: `DecimalField` måste definiera ett `decimal_places` attribut.

- fields.E131: `decimal_places` måste vara ett icke-negativt heltal.

- fields.E132: `DecimalField` måste definiera ett `max_digits` attribut.

- fields.E133: `max_digits` måste vara ett positivt heltal.

- fields.E134: `max_digits` måste vara större än eller lika med `decimal_places`.

- fields.E140: `FilePathField` måste ha antingen `allow_files` eller `allow_folders` satt till True.

- fields.E150: `GenericIPAddressField` kan inte ha `blank=True` om `null=False`, eftersom blanka värden lagras som nulls.

- fields.E160: Alternativen `auto_now`, `auto_now_add` och `default` är ömsesidigt uteslutande. Endast ett av dessa alternativ kan vara närvarande.

- fields.W161: Fastställt standardvärde som tillhandahålls.

- fields.W162: `<database>` stöder inte ett databasindex på `<field data type>` kolumner.

- fields.W163: `<database>` har inte stöd för kommentarer på kolumner (`db_comment`).

- fields.E170: `BinaryField`’s `default` kan inte vara en sträng. Använd bytesinnehåll istället.

- fields.E180: `<database>` har inte stöd för `JSONField`.

- fields.E190: `<database>` stöder inte en databassortering på ``<field_type>``s.

- fields.E220: `<database>` stöder inte ``GeneratedField``s.

- fields.E221: `<database>` stöder inte icke-persisterade ``GeneratedField``s.

- fields.E222: `<database>` stöder inte persistenta ``GeneratedField``s.

- fields.E223: `GeneratedField.output_field` har fel: …

- fields.W224: `GeneratedField.output_field` har varningar: …

- fields.E900: `IPAddressField` har tagits bort med undantag för stöd i historiska migreringar.

- fields.W900: `IPAddressField` har blivit föråldrad. Stöd för det (förutom i historiska migreringar) kommer att tas bort i Django 1.9. Denna kontroll dök upp i Django 1.7 och 1.8.

- fields.W901: `CommaSeparatedIntegerField` har blivit föråldrad. Stöd för det (förutom i historiska migreringar) kommer att tas bort i Django 2.0. Denna kontroll dök upp i Django 1.10 och 1.11.

- fields.E901: `CommaSeparatedIntegerField` tas bort förutom för stöd i historiska migreringar.

- fields.W902: `FloatRangeField` är föråldrad och kommer att tas bort i Django 3.1. Denna kontroll dök upp i Django 2.2 och 3.0.

- fields.W903: `NullBooleanField` är föråldrad. Stöd för det (utom i historiska migreringar) kommer att tas bort i Django 4.0. Denna kontroll dök upp i Django 3.1 och 3.2.

- fields.E903: `NullBooleanField` tas bort förutom för stöd i historiska migreringar.

- fields.W904: `django.contrib.postgres.fields.JSONField` är föråldrad. Stöd för det (utom i historiska migreringar) kommer att tas bort i Django 4.0. Denna kontroll dök upp i Django 3.1 och 3.2.

- fields.E904: `django.contrib.postgres.fields.JSONField` tas bort förutom för stöd i historiska migreringar.

- fields.W905: `django.contrib.postgres.fields.CICharField` är föråldrad. Stöd för det (utom i historiska migreringar) kommer att tas bort i Django 5.1. Denna kontroll dök upp i Django 4.2 och 5.0.

- fields.E905: `django.contrib.postgres.fields.CICharField` tas bort förutom för stöd i historiska migreringar.

- fields.W906: `django.contrib.postgres.fields.CIEmailField` är föråldrad. Stöd för det (utom i historiska migreringar) kommer att tas bort i Django 5.1. Denna kontroll dök upp i Django 4.2 och 5.0.

- fields.E906: `django.contrib.postgres.fields.CIEmailField` tas bort förutom för stöd i historiska migreringar.

- fields.W907: `django.contrib.postgres.fields.CITextField` är föråldrad. Stöd för det (utom i historiska migreringar) kommer att tas bort i Django 5.1. Denna kontroll dök upp i Django 4.2 och 5.0.

- fields.E907: `django.contrib.postgres.fields.CITextField` tas bort med undantag för stöd för historiska migreringar.

#### Fält

- fields.E200: `unique` är inte ett giltigt argument för en `FileField`. Denna kontroll är borttagen i Django 1.11.

- fields.E201: `primary_key` är inte ett giltigt argument för en `FileField`.

- fields.E202: `FileField`’s `upload_to` argument måste vara en relativ sökväg, inte en absolut sökväg.

- fields.E210: Det går inte att använda `ImageField` eftersom Pillow inte är installerat.

#### Relaterade områden

- fields.E300: Fältet definierar en relation med modell `<model>`, som antingen inte är installerad eller är abstrakt.

- fields.E301: Fältet definierar en relation med modellen `<app_label>.<model>` som har bytts ut.

- fields.E302: Omvänd accessor `<related model>.<accessor name>` för `<app_label>.<model>.<field name>` krockar med fältnamn `<app_label>.<model>.<field name>`.

- fields.E303: Omvänt frågenamn för `<app_label>.<model>.<field name>` krockar med fältnamn `<app_label>.<model>.<field name>`.

- fields.E304: Omvänd accessor `<related model>.<accessor name>` för `<app_label>.<model>.<field name>` krockar med omvänd accessor för `<app_label>.<model>.<field name>`.

- fields.E305: Namnet på den omvända frågan för `<app_label>.<model>.<field name>` krockar med namnet på den omvända frågan för `<app_label>.<model>.<field name>`.

- fields.E306: Namnet `<name>` är ett ogiltigt `related_name` för fältet `<model>.<field name>`.

- fields.E307: Fältet `<app label>.<model>.<field name>` deklarerades med en lat referens till `<app label>.<model>`, men appen `<app label>` är inte installerad eller tillhandahåller inte modellen `<model>`.

- fields.E308: Omvänt frågenamn `<related query name>` får inte sluta med en understreckare.

- fields.E309: Namnet på den omvända frågan `<related query name>` får inte innehålla `'__'`.

- fields.E310: Ingen delmängd av fälten `<field1>`, `<field2>`, … på modellen `<model>` är unik.

- fields.E311: `<model>.<field name>` måste vara unikt eftersom det refereras till av en `ForeignKey`.

- fields.E312: `to_field` `<field name>` finns inte i den relaterade modellen `<app label>.<model>`.

- fields.E320: Fältet anger `on_delete=SET_NULL`, men kan inte vara null.

- fields.E321: Fältet anger `on_delete=SET_DEFAULT`, men har inget standardvärde.

- fields.E330: `ManyToManyField` kan inte vara unika.

- fields.E331: Fältet anger en many-to-many-relation genom modellen `<model>`, som inte har installerats.

- fields.E332: Många-till-många-fält med mellanliggande tabeller får inte vara symmetriska. Denna kontroll dök upp före Django 3.0.

- fields.E333: Modellen används som en mellanliggande modell av `<model>`, men den har mer än två främmande nycklar till `<model>`, vilket är tvetydigt. Du måste ange vilka två främmande nycklar Django ska använda via nyckelordsargumentet `through_fields`.

- fields.E334: Modellen används som en mellanliggande modell av `<model>`, men den har mer än en främmande nyckel från `<model>`, vilket är tvetydigt. Du måste ange vilken främmande nyckel Django ska använda via nyckelordsargumentet `through_fields`.

- fields.E335: Modellen används som en mellanliggande modell av `<model>`, men den har mer än en främmande nyckel till `<model>`, vilket är tvetydigt. Du måste ange vilken främmande nyckel Django ska använda via nyckelordsargumentet `through_fields`.

- fields.E336: Modellen används som en mellanliggande modell av `<model>`, men den har ingen främmande nyckel till `<model>` eller `<model>`.

- fields.E337: Fältet specificerar `through_fields` men anger inte namnen på de två länkfält som ska användas för relationen genom `<model>`.

- fields.E338: Förmedlingsmodellen `<through model>` har inget fält `<field name>`.

- fields.E339: `<model>.<field name>` är inte en främmande nyckel till `<model>`.

- fields.E340: Fältets mellanliggande tabell `<table name>` kolliderar med tabellnamnet på `<model>`/`<model>.<field name>`.

- fields.W340: `null` har ingen effekt på `ManyToManyField`.

- fields.W341: `ManyToManyField` stöder inte `validatorer`.

- fields.W342: Att ställa in `unique=True` på en `ForeignKey` har samma effekt som att använda en `OneToOneField`.

- fields.W343: `limit_choices_to` har ingen effekt på `ManyToManyField` med en `through`-modell. Denna kontroll dök upp före Django 4.0.

- fields.W344: Fältets mellanliggande tabell `<table name>` krockar med tabellnamnet på `<model>`/`<model>.<field name>`.

- fields.W345: `related_name` har ingen effekt på `ManyToManyField` med en symmetrisk relation, t.ex. till ”self”.

- fields.W346: `db_comment` har ingen effekt på `ManyToManyField`.

- fields.E347: Fältet definierar en relation som involverar modellen `<model>` som har en `CompositePrimaryKey` och sådana relationer stöds inte.

- fields.E348: Related name `<related_name>` for `<model>.<field name>` clashes with the name of a model manager.

### Modeller

- models.E001: `<swappable>` är inte av formen `app_label.app_name`.

- models.E002: `<SETTING>` refererar till `<model>`, som inte har installerats, eller är abstrakt.

- Modeller.E003: Modellen har två identiska many-to-many-relationer genom den mellanliggande modellen `<app_label>.<model>`.

- models.E004: `id` kan endast användas som fältnamn om fältet också anger `primary_key=True`.

- models.E005: Fältet `<field name>` från överordnad modell `<model>` krockar med fältet `<field name>` från överordnad modell `<model>`.

- modeller.E006: Fältet `<field name>` krockar med fältet `<field name>` från modellen `<model>`.

- models.E007: Fältet `<field name>` har kolumnnamnet `<column name>` som används av ett annat fält.

- models.E008: `index_together` måste vara en lista eller tupel. Denna kontroll dök upp före Django 5.1.

- modeller.E009: Alla `index_together` element måste vara listor eller tupler. Denna kontroll dök upp före Django 5.1.

- models.E010: `unique_together` måste vara en lista eller tupel.

- modeller.E011: Alla `unique_together` element måste vara listor eller tupler.

- models.E012: `constraints/indexes/unique_together` hänvisar till det icke-existerande fältet `<field name>`.

- models.E013: `constraints/indexes/unique_together` hänvisar till en `ManyToManyField` `<field name>`, men `ManyToManyField` stöds inte för det alternativet.

- models.E014: `ordering` måste vara en tupel eller lista (även om du bara vill beställa efter ett fält).

- models.E015: `Ordering` hänvisar till det icke-existerande fältet, relaterade fältet eller uppslagsordet `<field name>`.

- models.E016: `constraints/indexes/unique_together` hänvisar till fältet `<field_name>` som inte är lokalt för modellen `<model>`.

- models.E017: Proxy-modellen `<model>` innehåller modellfält.

- models.E018: Autogenererat kolumnnamn för långt för fältet `<field>`. Maximal längd är `<maximum length>` för databasen `<alias>`.

- models.E019: Autogenererat kolumnnamn för långt för M2M-fältet `<M2M field>`. Maximal längd är `<maximum length>` för databasen `<alias>`.

- modeller.E020: Klassmetoden `<model>.check()` är för närvarande åsidosatt.

- models.E021: `Ordering` och `order_with_respect_to` kan inte användas tillsammans.

- models.E022: `<function>` innehåller en lat referens till `<app label>.<model>`, men appen `<app label>` är inte installerad eller tillhandahåller inte modellen `<model>`.

- models.E023: Modellnamnet `<model>` kan inte börja eller sluta med ett understreck eftersom det kolliderar med frågans uppslagssyntax.

- models.E024: Modellnamnet `<model>` kan inte innehålla dubbla understreck eftersom det kolliderar med frågans uppslagssyntax.

- models.E025: Egenskapen `<property name>` kolliderar med en relaterad fältaccessor.

- Modeller.E026: Modellen kan inte ha mer än ett fält med `primary_key=True`.

- models.W027: `<database>` stöder inte kontrollbegränsningar.

- modeller.E028: `db_table` `<db_table>` används av flera modeller: `<model list>`.

- models.E029: indexnamnet `<index>` är inte unikt för modellen `<model>`.

- models.E030: indexnamnet `<index>` är inte unikt bland modeller: `<model list>`.

- models.E031: begränsningsnamnet `<constraint>` är inte unikt för modellen `<model>`.

- models.E032: begränsningsnamnet `<constraint>` är inte unikt bland modeller: `<model list>`.

- models.E033: Indexnamnet `<index>` kan inte börja med ett understreck eller en siffra.

- modeller.E034: Indexnamnet `<index>` kan inte vara längre än `<max_length>` tecken.

- modeller.W035: `db_table` `<db_table>` används av flera modeller: `<model list>`.

- models.W036: `<database>` stöder inte unika begränsningar med villkor.

- models.W037: `<database>` stöder inte index med villkor.

- models.W038: `<database>` stöder inte deferrable unique constraints.

- models.W039: `<database>` stöder inte unika begränsningar med icke-nyckelkolumner.

- models.W040: `<database>` stöder inte index med kolumner som inte är nycklar.

- models.E041: `constraints` hänvisar till det länkade fältet `<field name>`.

- models.E042: `<field name>` kan inte ingå i den sammansatta primärnyckeln.

- models.W042: Auto-created primary key used when not defining a primary key type, by default `django.db.models.AutoField`. This check appeared in Django 3.2 - 5.2.

- models.W043: `<database>` stöder inte index på uttryck.

- models.W044: `<database>` stöder inte unika begränsningar för uttryck.

- modeller.W045: Kontrollbegränsningen `<constraint>` innehåller `RawSQL()` uttryck och kommer inte att valideras under modellen `full_clean()`.

- models.W046: `<database>` stöder inte kommentarer om tabeller (`db_table_comment`).

- models.W047: `<database>` stöder inte unika begränsningar med nulls distinct.

- models.E048: `constraints/indexes/unique_together` hänvisar till en `CompositePrimaryKey` `<field name>`, men `CompositePrimaryKey` stöds inte för det alternativet.

- models.E049: `constraints/indexes/unique_together` refers to a `ForeignObject` `<field name>` with multiple `from_fields`, which is not supported for that option.

### Kommandon för hantering

Följande kontroller verifierar att anpassade hanteringskommandon är korrekt konfigurerade:

- kommandon.E001: Kommandona `migrate` och `makemigrations` måste ha samma `autodetektor`.

### Säkerhet

Säkerhetskontrollerna gör inte din webbplats säker. De granskar inte kod, upptäcker inte intrång eller gör något särskilt komplext. Snarare hjälper de till att utföra en automatiserad checklista som kan hjälpa dig att förbättra webbplatsens säkerhet.

Vissa av dessa kontroller kanske inte är lämpliga för just din distributionskonfiguration. Om du till exempel gör din HTTP till HTTPS-omdirigering i en lastbalanserare skulle det vara irriterande att ständigt bli varnad om att du inte har aktiverat `SECURE_SSL_REDIRECT`. Använd `SILENCED_SYSTEM_CHECKS` för att tysta onödiga kontroller.

Följande kontroller körs om du använder alternativet `check --deploy`:

- security.W001: Du har inte `django.middleware.security.SecurityMiddleware` i din `MIDDLEWARE` så inställningarna `SECURE_HSTS_SECONDS`, `SECURE_CONTENT_TYPE_NOSNIFF`, `SECURE_REFERRER_POLICY`, `SECURE_CROSS_ORIGIN_OPENER_POLICY` och `SECURE_SSL_REDIRECT` kommer inte att ha någon effekt.

- säkerhet.W002: Du har inte `django.middleware.clickjacking.XFrameOptionsMiddleware` i din `MIDDLEWARE`, så dina sidor kommer inte att serveras med en `'x-frame-options'` header. Om det inte finns en god anledning till att din webbplats ska visas i en ram bör du överväga att aktivera det här sidhuvudet för att förhindra clickjacking-attacker.

- säkerhet.W003: Du verkar inte använda Djangos inbyggda skydd mot förfalskning av begäran på flera webbplatser via middleware (`django.middleware.csrf.CsrfViewMiddleware` finns inte i din `MIDDLEWARE`). Att aktivera middleware är det säkraste tillvägagångssättet för att säkerställa att du inte lämnar några hål.

- security.W004: Du har inte angett något värde för inställningen `SECURE_HSTS_SECONDS`. Om hela din webbplats endast serveras via SSL kan du överväga att ange ett värde och aktivera HTTP Strict Transport Security. Se till att läsa dokumentationen först; om du aktiverar HSTS slarvigt kan det orsaka allvarliga och oåterkalleliga problem.

- security.W005: Du har inte satt inställningen `SECURE_HSTS_INCLUDE_SUBDOMAINS` till `True`. Om du inte gör det är din webbplats potentiellt sårbar för attacker via en osäker anslutning till en underdomän. Ställ endast in detta på `True` om du är säker på att alla underdomäner på din domän ska serveras uteslutande via SSL.

- säkerhet.W006: Din `SECURE_CONTENT_TYPE_NOSNIFF`-inställning är inte inställd på `True`, så dina sidor kommer inte att serveras med en `'X-Content-Type-Options: nosniff'`-rubrik. Du bör överväga att aktivera detta huvud för att förhindra att webbläsaren identifierar innehållstyper på ett felaktigt sätt.

- security.W007: Din inställning `SECURE_BROWSER_XSS_FILTER` är inte inställd på `True`, så dina sidor kommer inte att serveras med en `'X-XSS-Protection: 1; mode=block'` rubrik. Du bör överväga att aktivera den här rubriken för att aktivera webbläsarens XSS-filtrering och hjälpa till att förhindra XSS-attacker. Denna kontroll tas bort i Django 3.0 eftersom `X-XSS-Protection` headern inte längre respekteras av moderna webbläsare.

- security.W008: Din `SECURE_SSL_REDIRECT`-inställning är inte inställd på `True`. Om inte din webbplats ska vara tillgänglig via både SSL- och icke-SSL-anslutningar bör du antingen ange inställningen `True` eller konfigurera en lastbalanserare eller reverse-proxy-server för att omdirigera alla anslutningar till HTTPS.

- security.W009: Din `SECRET_KEY` har mindre än 50 tecken, mindre än 5 unika tecken, eller så är det prefixat med `'django-insecure-'` vilket indikerar att det genererades automatiskt av Django. Generera ett långt och slumpmässigt värde, annars kommer många av Djangos säkerhetskritiska funktioner att vara sårbara för attacker.

- security.W010: Du har `django.contrib.sessions` i din `INSTALLED_APPS` men du har inte satt `SESSION_COOKIE_SECURE` till `True`. Genom att använda en sessionskaka som endast är säker blir det svårare för sniffare av nätverkstrafik att kapa användarsessioner.

- säkerhet.W011: Du har `django.contrib.sessions.middleware.SessionMiddleware` i din `MIDDLEWARE`, men du har inte satt `SESSION_COOKIE_SECURE` till `True`. Om du använder en sessionskaka som endast är säker blir det svårare för sniffare att kapa användarsessioner.

- security.W012: `SESSION_COOKIE_SECURE` är inte satt till `True`. Om du använder en sessionskaka som bara är säker blir det svårare för sniffare att kapa användarsessioner.

- säkerhet.W013: Du har `django.contrib.sessions` i din `INSTALLED_APPS`, men du har inte satt `SESSION_COOKIE_HTTPONLY` till `True`. Genom att använda en `HttpOnly`-sessionskaka blir det svårare för cross-site scripting-attacker att kapa användarsessioner.

- säkerhet.W014: Du har `django.contrib.sessions.middleware.SessionMiddleware` i din `MIDDLEWARE`, men du har inte satt `SESSION_COOKIE_HTTPONLY` till `True`. Om du använder en `HttpOnly`-sessionskaka blir det svårare för cross-site scripting-attacker att kapa användarsessioner.

- security.W015: `SESSION_COOKIE_HTTPONLY` är inte satt till `True`. Genom att använda en `HttpOnly`-sessionskaka blir det svårare för cross-site scripting-attacker att kapa användarsessioner.

- security.W016: `CSRF_COOKIE_SECURE` är inte satt till `True`. Genom att använda en CSRF-cookie som endast är säker blir det svårare för sniffare av nätverkstrafik att stjäla CSRF-token.

- security.W017: `CSRF_COOKIE_HTTPONLY` är inte satt till `True`. Genom att använda en `HttpOnly` CSRF cookie blir det svårare för cross-site scripting attacker att stjäla CSRF token. Denna kontroll tas bort i Django 1.11 eftersom * :setting:`CSRF_COOKIE_HTTPONLY` *inställningen inte ger någon praktisk fördel.

- security.W018: Du bör inte ha `DEBUG` inställd på `True` i distributionen.

- säkerhet.W019: Du har `django.middleware.clickjacking.XFrameOptionsMiddleware` i din `MIDDLEWARE`, men `X_FRAME_OPTIONS` är inte inställd på `'DENY'`. Om det inte finns en god anledning till att din webbplats ska visa andra delar av sig själv i en ram, bör du ändra den till `'DENY'`.

- security.W020: `ALLOWED_HOSTS` får inte vara tomt i distributionen.

- security.W021: Du har inte satt inställningen `SECURE_HSTS_PRELOAD` till `True`. Om du inte gör det kan din webbplats inte läggas till i webbläsarens lista över förinlästa sidor.

- säkerhet.W022: Du har inte ställt in inställningen `SECURE_REFERRER_POLICY`. Utan denna inställning kommer din webbplats inte att skicka ett Referrer-Policy-huvud. Du bör överväga att aktivera detta huvud för att skydda användarnas integritet.

- security.E023: Du har satt inställningen `SECURE_REFERRER_POLICY` till ett ogiltigt värde.

- security.E024: Du har satt inställningen `SECURE_CROSS_ORIGIN_OPENER_POLICY` till ett ogiltigt värde.

- security.W025: Din `SECRET_KEY_FALLBACKS[n]` har mindre än 50 tecken, mindre än 5 unika tecken, eller så är den försedd med `'django-insecure-'` vilket indikerar att den genererades automatiskt av Django. Generera ett långt och slumpmässigt värde, annars kommer många av Djangos säkerhetskritiska funktioner att vara sårbara för attacker.

Följande kontroller verifierar att dina säkerhetsrelaterade inställningar är korrekt konfigurerade:

- security.E100: `DEFAULT_HASHING_ALGORITHM` måste vara `'sha1'` eller `'sha256'`. Denna kontroll dök upp i Django 3.1 och 3.2.

- säkerhet.E101: CSRF-felvyn `'path.to.view'` tar inte emot rätt antal argument.

- säkerhet.E102: CSRF-misslyckandevyn `'path.to.view'` kunde inte importeras.

- security.E026: The CSP setting `<SETTING_NAME>` must be a dictionary (got `<value>` instead).

### Signaler

- signals.E001: `<handler>` was connected to the `<signal>` signal with a lazy reference to the sender `<app label>.<model>`, but app `<app label>` isn’t installed or does not provide model `<model>`.

### Mallar

Följande kontroller verifierar att inställningen `TEMPLATES` är korrekt konfigurerad:

- templates.E001: Du har `'APP_DIRS': True` i din `TEMPLATES` men anger också `'loaders'` i `OPTIONS`. Ta antingen bort `APP_DIRS` eller ta bort alternativet `'loaders`. Denna kontroll tas bort i Django 5.1 eftersom systemkontroller nu kan ge * ``ImproperlyConfigured`` *i stället.

- templates.E002: `string_if_invalid` i `TEMPLATES` `OPTIONS` måste vara en sträng men fick: `{value}` (`{type}`).

- templates.E003:`<name>` används för flera malltaggmoduler: `<module list>`. Denna kontroll ändrades till `templates.W003` i Django 4.1.2.

- templates.W003:`<name>` används för flera malltaggmoduler: `<module list>`.

### Översättning

Följande kontroller utförs på din översättningskonfiguration:

- Översättning.E001: Du har angett ett ogiltigt värde för inställningen `LANGUAGE_CODE`: `<value>`.

- Översättning.E002: Du har angett en ogiltig språkkod i inställningen `LANGUAGES`: `<value>`.

- Översättning.E003: Du har angett en ogiltig språkkod i inställningen `LANGUAGES_BIDI`: `<value>`.

- översättning.E004: Du har angett ett värde för inställningen `LANGUAGE_CODE` som inte finns i inställningen `LANGUAGES`.

### URL:er

Följande kontroller utförs på din URL-konfiguration:

- urls.W001: Ditt URL-mönster `<pattern>` använder `include()` med en `route` som slutar med en `$`. Ta bort dollarn från `route` för att undvika problem med att inkludera webbadresser.

- urls.W002: Ditt URL-mönster `<pattern>` har en `route` som börjar med en `/`. Ta bort detta snedstreck eftersom det är onödigt. Om detta mönster är målet i en `include()`, se till att `include()`-mönstret har en efterföljande `/`.

- urls.W003: Ditt URL-mönster `<pattern>` har ett `namn` som innehåller en `:`. Ta bort kolon, för att undvika tvetydiga namnrymdsreferenser.

- urls.E004: Ditt URL-mönster `<pattern>` är ogiltigt. Se till att `urlpatterns` är en lista med `path()` och/eller `re_path()` instanser.

- urls.W005: URL-namnrymden `<namespace>` är inte unik. Du kanske inte kan vända alla webbadresser i detta namnområde.

- urls.E006: Inställningen `MEDIA_URL`/ `STATIC_URL` måste sluta med ett snedstreck.

- urls.E007: Den anpassade `handlerXXX` vyn `'path.to.view'` tar inte rätt antal argument (…).

- urls.E008: Den anpassade `handlerXXX` vyn `'path.to.view'` kunde inte importeras.

- urls.E009: Ditt URL-mönster `<pattern>` har en ogiltig vy, skicka `<view>.as_view()` istället för `<view>`.

- urls.W010: Ditt URL-mönster `<pattern>` har en omatchad `<angle bracket>`.

## `contrib` app kontrollerar

### `admin`

Alla adminkontroller utförs som en del av taggen `admin`.

Följande kontroller utförs på alla `ModelAdmin` (eller underklasser) som är registrerade på administratörssidan:

- admin.E001: Värdet på `raw_id_fields` måste vara en lista eller tupel.

- admin.E002: Värdet på `raw_id_fields[n]` hänvisar till `<field name>`, som inte är ett fält i `<model>`.

- admin.E003: Värdet på `raw_id_fields[n]` måste vara en främmande nyckel eller ett många-till-många-fält.

- admin.E004: Värdet på `fields` måste vara en lista eller tupel.

- admin.E005: Både `fieldsets` och `fields` är specificerade.

- admin.E006: Värdet av `fields` innehåller duplicerade fält.

- admin.E007: Värdet på `fieldsets` måste vara en lista eller tupel.

- admin.E008: Värdet på `fieldsets[n]` måste vara en lista eller tupel.

- admin.E009: Värdet av `fieldsets[n]` måste vara av längden 2.

- admin.E010: Värdet på `fieldsets[n][1]` måste vara en ordbok.

- admin.E011: Värdet av `fieldsets[n][1]` måste innehålla nyckeln `fields`.

- admin.E012: Det finns duplicerade fält i `fieldsets[n][1]`.

- admin.E013: Värdet på `fields[n]/filter_horizontal[n]/filter_vertical[n]/fieldsets[n][m]` kan inte inkludera `ManyToManyField` `<field name>`, eftersom det fältet manuellt anger en relationsmodell.

- admin.E014: Värdet på `exclude` måste vara en lista eller tupel.

- admin.E015: Värdet av `exclude` innehåller duplicerade fält.

- admin.E016: Värdet av `form` måste ärva från `BaseModelForm`.

- admin.E017: Värdet på `filter_vertical` måste vara en lista eller tupel.

- admin.E018: Värdet på `filter_horizontal` måste vara en lista eller tupel.

- admin.E019: Värdet på `filter_vertical[n]/filter_horizontal[n]` hänvisar till `<field name>`, som inte är ett fält i `<model>`.

- admin.E020: Värdet på `filter_vertical[n]/filter_horizontal[n]` måste vara ett många-till-många-fält.

- admin.E021: Värdet på `radio_fields` måste vara en ordbok.

- admin.E022: Värdet på `radio_fields` hänvisar till `<field name>`, som inte är ett fält i `<model>`.

- admin.E023: Värdet på `radio_fields` refererar till `<field name>`, som inte är en instans av `ForeignKey`, och inte har en `choices` definition.

- admin.E024: Värdet på `radio_fields[<field name>]` måste vara antingen `admin.HORIZONTAL` eller `admin.VERTICAL`.

- admin.E025: Värdet på `view_on_site` måste vara antingen en callable eller ett boolean-värde.

- admin.E026: Värdet på `prepopulated_fields` måste vara en ordbok.

- admin.E027: Värdet på `prepopulated_fields` hänvisar till `<field name>`, som inte är ett fält i `<model>`.

- admin.E028: Värdet på `prepopulated_fields` hänvisar till `<field name>`, som inte får vara ett `DateTimeField`, ett `ForeignKey`, ett `OneToOneField` eller ett `ManyToManyField` fält.

- admin.E029: Värdet på `prepopulated_fields[<field name>]` måste vara en lista eller tupel.

- admin.E030: Värdet på `prepopulated_fields` hänvisar till `<field name>`, som inte är ett fält i `<model>`.

- admin.E031: Värdet av `ordering` måste vara en lista eller tupel.

- admin.E032: Värdet av `ordering` har den slumpmässiga ordningsmarkören `?`, men innehåller även andra fält.

- admin.E033: Värdet av `ordering` hänvisar till `<field name>`, som inte är ett fält i `<model>`.

- admin.E034: Värdet på `readonly_fields` måste vara en lista eller tupel.

- admin.E035: Värdet på `readonly_fields[n]` refererar till `<field_name>`, som inte är en callable, ett attribut till `<ModelAdmin class>`, eller ett attribut till `<model>`.

- admin.E036: Värdet på `autocomplete_fields` måste vara en lista eller tupel.

- admin.E037: Värdet på `autocomplete_fields[n]` hänvisar till `<field name>`, som inte är ett fält i `<model>`.

- admin.E038: Värdet på `autocomplete_fields[n]` måste vara en främmande nyckel eller ett många-till-många-fält.

- admin.E039: En admin för modellen `<model>` måste vara registrerad för att kunna refereras av `<modeladmin>.autocomplete_fields`.

- admin.E040: `<modeladmin>` måste definiera `search_fields`, eftersom det refereras till av `<other_modeladmin>.autocomplete_fields`.

#### `ModelAdmin`

Följande kontroller utförs på alla `ModelAdmin` som är registrerade på administratörssidan:

- admin.E101: Värdet på `save_as` måste vara en boolean.

- admin.E102: Värdet på `save_on_top` måste vara ett boolean.

- admin.E103: Värdet på `inlines` måste vara en lista eller tupel.

- admin.E104: `<InlineModelAdmin class>` måste ärva från `InlineModelAdmin`.

- admin.E105: `<InlineModelAdmin class>` måste ha ett `model`-attribut.

- admin.E106: Värdet av `<InlineModelAdmin class>.model` måste vara en `Model`.

- admin.E107: Värdet på `list_display` måste vara en lista eller tupel.

- admin.E108: Värdet på `list_display[n]` hänvisar till `<label>`, som inte är en anropsbar eller attribut för `<ModelAdmin class>`, eller ett attribut, metod eller fält på `<model>`.

- admin.E109: Värdet på `list_display[n]` får inte vara ett many-to-many-fält eller en omvänd främmande nyckel.

- admin.E110: Värdet på `list_display_links` måste vara en lista, en tupel eller `None`.

- admin.E111: Värdet på `list_display_links[n]` hänvisar till `<label>`, som inte är definierat i `list_display`.

- admin.E112: Värdet på `list_filter` måste vara en lista eller tupel.

- admin.E113: Värdet av `list_filter[n]` måste ärva från `ListFilter`.

- admin.E114: Värdet på `list_filter[n]` får inte ärva från `FieldListFilter`.

- admin.E115: Värdet på `list_filter[n][1]` måste ärva från `FieldListFilter`.

- admin.E116: Värdet på `list_filter[n]` hänvisar till `<label>`, som inte hänvisar till ett fält.

- admin.E117: Värdet på `list_select_related` måste vara en boolean, tuple eller list.

- admin.E118: Värdet på `list_per_page` måste vara ett heltal.

- admin.E119: Värdet på `list_max_show_all` måste vara ett heltal.

- admin.E120: Värdet av `list_editable` måste vara en lista eller tupel.

- admin.E121: Värdet av `list_editable[n]` refererar till `<label>`, som inte är ett fält i `<model>`.

- admin.E122: Värdet på `list_editable[n]` hänvisar till `<label>`, som inte finns i `list_display`.

- admin.E123: Värdet i `list_editable[n]` kan inte finnas i både `list_editable` och `list_display_links`.

- admin.E124: Värdet på `list_editable[n]` hänvisar till det första fältet i `list_display` (`<label>`), som inte kan användas om inte `list_display_links` är inställt.

- admin.E125: Värdet på `list_editable[n]` hänvisar till `<field name>`, som inte kan redigeras via admin.

- admin.E126: Värdet på `search_fields` måste vara en lista eller tupel.

- admin.E127: Värdet på `date_hierarchy` refererar till `<field name>`, vilket inte refererar till ett fält.

- admin.E128: Värdet av `date_hierarchy` måste vara en `DateField` eller `DateTimeField`.

- admin.E129: `<modeladmin>` måste definiera en `has_<foo>_permission()` metod för `<action>` action.

- admin.E130: attributen `__name__` för åtgärder som definieras i `<modeladmin>` måste vara unika. Namnet `<name>` är inte unikt.

#### `InlineModelAdmin`

Följande kontroller utförs på alla `InlineModelAdmin` som är registrerade som en inline på en `ModelAdmin`.

- admin.E201: Det går inte att utesluta fältet `<field name>`, eftersom det är en främmande nyckel till den överordnade modellen `<app_label>.<model>`.

- admin.E202: `<model>` har ingen `ForeignKey` till `<parent model>`./ `<model>` har mer än en `ForeignKey` till `<parent model>`. Du måste ange ett `fk_name`-attribut.

- admin.E203: Värdet på `extra` måste vara ett heltal.

- admin.E204: Värdet på `max_num` måste vara ett heltal.

- admin.E205: Värdet på `min_num` måste vara ett heltal.

- admin.E206: Värdet av `formset` måste ärva från `BaseModelFormSet`.

#### `GenericInlineModelAdmin`

Följande kontroller utförs på alla `GenericInlineModelAdmin` som är registrerade som en inline på en `ModelAdmin`.

- admin.E301: `<model>` har ingen `GenericForeignKey`.

- admin.E302: `'ct_field'` refererar till `<label>`, som inte är ett fält på `<model>`.

- admin.E303: `'ct_fk_field'` refererar till `<label>`, som inte är ett fält på `<model>`.

- admin.E304: `<model>` har ingen `GenericForeignKey` som använder innehållstypfältet `<field name>` och objekt-ID-fältet `<field name>`.

#### `AdminSite`

Följande kontroller utförs på standardklassen `AdminSite`:

- admin.E401: `django.contrib.contenttypes` måste finnas i `INSTALLED_APPS` för att admin-programmet ska kunna användas.

- admin.E402: `django.contrib.auth.context_processors.auth` måste aktiveras i `DjangoTemplates` (`TEMPLATES`) om du använder standardbackend för auth för att kunna använda admin-programmet.

- admin.E403: En instans av `django.template.backends.django.DjangoTemplates` måste konfigureras i `TEMPLATES` för att admin-programmet ska kunna användas.

- admin.E404: `django.contrib.messages.context_processors.messages` måste vara aktiverat i `DjangoTemplates` (`TEMPLATES`) för att kunna använda admin-programmet.

- admin.E405: `django.contrib.auth` måste finnas i `INSTALLED_APPS` för att admin-programmet ska kunna användas.

- admin.E406: `django.contrib.messages` måste finnas i `INSTALLED_APPS` för att admin-programmet ska kunna användas.

- admin.E408: `django.contrib.auth.middleware.AuthenticationMiddleware` måste finnas i `MIDDLEWARE` för att admin-programmet ska kunna användas.

- admin.E409: `django.contrib.messages.middleware.MessageMiddleware` måste finnas i `MIDDLEWARE` för att admin-programmet ska kunna användas.

- admin.E410: `django.contrib.sessions.middleware.SessionMiddleware` måste finnas i `MIDDLEWARE` för att admin-programmet ska kunna användas.

- admin.w411: `django.template.context_processors.request` måste vara aktiverat i `DjangoTemplates` (`TEMPLATES`) för att kunna använda sidofältet i admin-navigationen.

### `auth`

- auth.E001: `REQUIRED_FIELDS` måste vara en lista eller tupel.

- auth.e002: Fältet som heter `USERNAME_FIELD` för en anpassad användarmodell får inte ingå i `REQUIRED_FIELDS`.

- auth.E003: `<field>` måste vara unik eftersom den är namngiven som `USERNAME_FIELD`.

- auth.w004: `<field>` är namngiven som `USERNAME_FIELD`, men den är inte unik.

- auth.E005: Behörigheten med kodnamnet `<codename>` krockar med en inbyggd behörighet för modellen `<model>`.

- auth.E006: Behörigheten med kodnamnet `<codename>` är duplicerad för modellen `<model>`.

- auth.e007: `verbose_name` för modellen `<model>` måste vara högst 244 tecken för att dess inbyggda behörighetsnamn ska vara högst 255 tecken.

- auth.E008: Behörigheten med namnet `<name>` för modellen `<model>` är längre än 255 tecken.

- auth.C009: `<User model>.is_anonymous` måste vara ett attribut eller en egenskap snarare än en metod. Att ignorera detta är en säkerhetsfråga eftersom anonyma användare kommer att behandlas som autentiserade!

- auth.C010: `<User model>.is_authenticated` måste vara ett attribut eller en egenskap snarare än en metod. Att ignorera detta är en säkerhetsfråga eftersom anonyma användare kommer att behandlas som autentiserade!

- auth.E011: Namnet på modellen `<model>` måste vara högst 93 tecken för att dess inbyggda behörighetsnamn ska vara högst 100 tecken.

- auth.E012: Behörigheten med kodnamnet `<codename>` för modellen `<model>` är längre än 100 tecken.

- auth.e013: För att kunna använda `django.contrib.auth.middleware.LoginRequiredMiddleware` måste `django.contrib.auth.middleware.AuthenticationMiddleware` definieras före den i MIDDLEWARE.

### `innehållstyper`

Följande kontroller utförs när en modell innehåller en `GenericForeignKey` eller `GenericRelation`:

- contenttypes.E001: Objekt-ID:t för `GenericForeignKey` refererar till det icke-existerande fältet `<field>`.

- contenttypes.E002: Innehållstypen `GenericForeignKey` refererar till det icke existerande fältet `<field>`.

- contenttypes.E003: `<field>` är inte en `ForeignKey`.

- contenttypes.E004: `<field>` är inte en `ForeignKey` till `contenttypes.ContentType`.

- innehållstyper.E005: Modellnamn får innehålla högst 100 tecken.

### `postgres`

The following checks are performed on `django.contrib.postgres` model fields, indexes, and constraints:

- postgres.E001: Basfältet för array har fel: …

- postgres.E002: Basfältet för en array kan inte vara ett relaterat fält.

- postgres.E003: `<field>` default bör vara en callable istället för en instans så att den inte delas mellan alla fältinstanser. Denna kontroll ändrades till `fields.E010` i Django 3.1.

- postgres.W004: Basfält för array har varningar: …

- postgres.E005: `'django.contrib.postgres'` must be in `INSTALLED_APPS` in order to use `<django.contrib.postgres feature>`.

### `webbplatser`

Följande kontroller utförs på alla modeller som använder en `CurrentSiteManager`:

- sites.E001: `CurrentSiteManager` kunde inte hitta ett fält med namnet `<field name>`.

- sites.E002: `CurrentSiteManager` kan inte använda `<field>` eftersom det inte är en främmande nyckel eller ett många-till-många-fält.

Följande kontroller verifierar att `django.contrib.sites` är korrekt konfigurerad:

- sites.E101: Inställningen `SITE_ID` måste vara ett heltal.

### `statiska filer`

Följande kontroller verifierar att `django.contrib.staticfiles` är korrekt konfigurerad:

- staticfiles.E001: Inställningen `STATICFILES_DIRS` är inte en tupel eller lista.

- staticfiles.E002: Inställningen `STATICFILES_DIRS` bör inte innehålla inställningen `STATIC_ROOT`.

- staticfiles.E003: Prefixet `<prefix>` i inställningen `STATICFILES_DIRS` får inte sluta med ett snedstreck.

- staticfiles.W004: Katalogen `<directory>` i `STATICFILES_DIRS` finns inte.

- staticfiles.E005: Inställningen `STORAGES` måste definiera en lagringsplats för `staticfiles`.