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
¶
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 medERROR
, kommer Django att förhindra att hanteringskommandon utförs. Meddelanden med en lägre nivå änERROR
(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ärX
är en av bokstävernaCEWID
, 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.
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 enroute
som innehåller(?P<
, börjar med^
, eller slutar med$
. Detta var troligen ett förbiseende när vi migrerade frånurl()
tillpath()
.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 (vanligtvishttp://
ellerhttps://
) 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 dinCACHES
inställning.caches.W002: Din konfiguration
<cache>
kan exponera din cache eller leda till att dina data skadas eftersom dessLOCATION
matchar/är inuti/innehållerMEDIA_ROOT
/STATIC_ROOT
/STATICFILES_DIRS
.caches.W003: Din
<cache>
cacheLOCATION
ä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 enmax_length
> 255. Denna kontroll ändrades tillmysql.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 enmax_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 varaNone
,True
ellerFalse
.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 ichoices
(<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 idb_default
.fields.E013:
CompositePrimaryKey
måste ha namnetpk
.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örmax_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 ettdecimal_places
attribut.fields.E131:
decimal_places
måste vara ett icke-negativt heltal.fields.E132:
DecimalField
måste definiera ettmax_digits
attribut.fields.E133:
max_digits
måste vara ett positivt heltal.fields.E134:
max_digits
måste vara större än eller lika meddecimal_places
.fields.E140:
FilePathField
måste ha antingenallow_files
ellerallow_folders
satt till True.fields.E150:
GenericIPAddressField
kan inte hablank=True
omnull=False
, eftersom blanka värden lagras som nulls.fields.E160: Alternativen
auto_now
,auto_now_add
ochdefault
ä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
’sdefault
kan inte vara en sträng. Använd bytesinnehåll istället.fields.E180:
<database>
har inte stöd förJSONField
.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 enFileField
. Denna kontroll är borttagen i Django 1.11.fields.E201:
primary_key
är inte ett giltigt argument för enFileField
.fields.E202:
FileField
’supload_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.
Modeller¶
models.E001:
<swappable>
är inte av formenapp_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å angerprimary_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 enManyToManyField
<field name>
, menManyToManyField
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
ochorder_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: Automatisk skapad primärnyckel används när man inte definierar en primärnyckeltyp, som standard
django.db.models.AutoField
.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ållerRawSQL()
uttryck och kommer inte att valideras under modellenfull_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 enCompositePrimaryKey
<field name>
, menCompositePrimaryKey
stöds inte för det alternativet.
Kommandon för hantering¶
Följande kontroller verifierar att anpassade hanteringskommandon är korrekt konfigurerade:
kommandon.E001: Kommandona
migrate
ochmakemigrations
måste ha sammaautodetektor
.
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 dinMIDDLEWARE
så inställningarnaSECURE_HSTS_SECONDS
,SECURE_CONTENT_TYPE_NOSNIFF
,SECURE_REFERRER_POLICY
,SECURE_CROSS_ORIGIN_OPENER_POLICY
ochSECURE_SSL_REDIRECT
kommer inte att ha någon effekt.säkerhet.W002: Du har inte
django.middleware.clickjacking.XFrameOptionsMiddleware
i dinMIDDLEWARE
, 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 dinMIDDLEWARE
). 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
tillTrue
. 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 eftersomX-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ällningenTrue
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 dinINSTALLED_APPS
men du har inte sattSESSION_COOKIE_SECURE
tillTrue
. 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 dinMIDDLEWARE
, men du har inte sattSESSION_COOKIE_SECURE
tillTrue
. 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 tillTrue
. 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 dinINSTALLED_APPS
, men du har inte sattSESSION_COOKIE_HTTPONLY
tillTrue
. Genom att använda enHttpOnly
-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 dinMIDDLEWARE
, men du har inte sattSESSION_COOKIE_HTTPONLY
tillTrue
. Om du använder enHttpOnly
-sessionskaka blir det svårare för cross-site scripting-attacker att kapa användarsessioner.security.W015:
SESSION_COOKIE_HTTPONLY
är inte satt tillTrue
. Genom att använda enHttpOnly
-sessionskaka blir det svårare för cross-site scripting-attacker att kapa användarsessioner.security.W016:
CSRF_COOKIE_SECURE
är inte satt tillTrue
. 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 tillTrue
. Genom att använda enHttpOnly
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 * :inställningen:`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 dinMIDDLEWARE
, menX_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
tillTrue
. 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 :inställning:`SECRET_KEY_FALLBACKS[n] <SECRET_KEY_FALLBACKS>` 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.
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 dinTEMPLATES
men anger också'loaders'
iOPTIONS
. Ta antingen bortAPP_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
iTEMPLATES
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 tilltemplates.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ällningenLANGUAGES
.
URL:er¶
Följande kontroller utförs på din URL-konfiguration:
urls.W001: Ditt URL-mönster
<pattern>
använderinclude()
med enroute
som slutar med en$
. Ta bort dollarn frånroute
för att undvika problem med att inkludera webbadresser.urls.W002: Ditt URL-mönster
<pattern>
har enroute
som börjar med en/
. Ta bort detta snedstreck eftersom det är onödigt. Om detta mönster är målet i eninclude()
, se till attinclude()
-mönstret har en efterföljande/
.urls.W003: Ditt URL-mönster
<pattern>
har ettnamn
som innehåller en:
. Ta bort kolon, för att undvika tvetydiga namnrymdsreferenser.urls.E004: Ditt URL-mönster
<pattern>
är ogiltigt. Se till atturlpatterns
är en lista medpath()
och/ellerre_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 :klasser:`~django.contrib.admin.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
ochfields
ä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 nyckelnfields
.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 inkluderaManyToManyField
<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ånBaseModelForm
.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 avForeignKey
, och inte har enchoices
definition.admin.E024: Värdet på
radio_fields[<field name>]
måste vara antingenadmin.HORIZONTAL
elleradmin.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 ettDateTimeField
, ettForeignKey
, ettOneToOneField
eller ettManyToManyField
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 definierasearch_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ånInlineModelAdmin
.admin.E105:
<InlineModelAdmin class>
måste ha ettmodel
-attribut.admin.E106: Värdet av
<InlineModelAdmin class>.model
måste vara enModel
.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 ellerNone
.admin.E111: Värdet på
list_display_links[n]
hänvisar till<label>
, som inte är definierat ilist_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ånListFilter
.admin.E114: Värdet på
list_filter[n]
får inte ärva frånFieldListFilter
.admin.E115: Värdet på
list_filter[n][1]
måste ärva frånFieldListFilter
.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 ilist_display
.admin.E123: Värdet i
list_editable[n]
kan inte finnas i bådelist_editable
ochlist_display_links
.admin.E124: Värdet på
list_editable[n]
hänvisar till det första fältet ilist_display
(<label>
), som inte kan användas om intelist_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 enDateField
ellerDateTimeField
.admin.E129:
<modeladmin>
måste definiera enhas_<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 ingenForeignKey
till<parent model>
./<model>
har mer än enForeignKey
till<parent model>
. Du måste ange ettfk_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ånBaseModelFormSet
.
GenericInlineModelAdmin
¶
Följande kontroller utförs på alla GenericInlineModelAdmin
som är registrerade som en inline på en ModelAdmin
.
admin.E301:
'ct_field'
refererar till<label>
, som inte är ett fält på<model>
.admin.E302:
'ct_fk_field'
refererar till<label>
, vilket inte är ett fält på<model>
.admin.E303:
<model>
har ingenGenericForeignKey
.admin.E304:
<model>
har ingenGenericForeignKey
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 iINSTALLED_APPS
för att admin-programmet ska kunna användas.admin.E402:
django.contrib.auth.context_processors.auth
måste aktiveras iDjangoTemplates
(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 iTEMPLATES
för att admin-programmet ska kunna användas.admin.E404:
django.contrib.messages.context_processors.messages
måste vara aktiverat iDjangoTemplates
(TEMPLATES
) för att kunna använda admin-programmet.admin.E405:
django.contrib.auth
måste finnas iINSTALLED_APPS
för att admin-programmet ska kunna användas.admin.E406:
django.contrib.messages
måste finnas iINSTALLED_APPS
för att admin-programmet ska kunna användas.admin.E408:
django.contrib.auth.middleware.AuthenticationMiddleware
måste finnas iMIDDLEWARE
för att admin-programmet ska kunna användas.admin.E409:
django.contrib.messages.middleware.MessageMiddleware
måste finnas iMIDDLEWARE
för att admin-programmet ska kunna användas.admin.E410:
django.contrib.sessions.middleware.SessionMiddleware
måste finnas iMIDDLEWARE
för att admin-programmet ska kunna användas.admin.w411:
django.template.context_processors.request
måste vara aktiverat iDjangoTemplates
(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å iREQUIRED_FIELDS
.auth.E003:
<field>
måste vara unik eftersom den är namngiven somUSERNAME_FIELD
.auth.w004:
<field>
är namngiven somUSERNAME_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åstedjango.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 enForeignKey
.contenttypes.E004:
<field>
är inte enForeignKey
tillcontenttypes.ContentType
.innehållstyper.E005: Modellnamn får innehålla högst 100 tecken.
postgres
¶
Följande kontroller utförs på django.contrib.postgres
modellfält:
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 tillfields.E010
i Django 3.1.postgres.W004: Basfält för array har varningar: …
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ällningenSTATIC_ROOT
.staticfiles.E003: Prefixet
<prefix>
i inställningenSTATICFILES_DIRS
får inte sluta med ett snedstreck.staticfiles.W004: Katalogen
<directory>
i :inställningen:`STATICFILES_DIRS` finns inte.staticfiles.E005: Inställningen
STORAGES
måste definiera en lagringsplats förstaticfiles
.