---
title: "Kerangka pemeriksaan sistem"
version: 4.0
locale: id
source: https://docs.djangoproject.com/id/4.0/ref/checks/
canonical: https://djangodocs.dev/id/4.0/ref/checks/
---
# Kerangka pemeriksaan sistem

Kerangka sistem pemeriksaan adalah kumpulan dari pemeriksaan tetap untuk memeriksa kebenaran proyek Django. Dia menemukan masalah umum dan menyediakan petunjuk untuk bagaimana memperbaiki mereka. Kerangka ini dapat diperpanjang sehingga anda dapat dengan mudah menambahkan pemeriksaan anda sendiri.

Untuk rincian bagaimana anda menambahkan pemeriksaan sendiri dan menyatukan mereka ke dalam pemeriksaan sistem Django, lihat [System check topic guide](/id/4.0/topics/checks/).

## Acuan API

### `CheckMessage`

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

Peringatan dan kesalahan dimunculkan oleh sistem pemeriksaan harus contoh dari `CheckMessage`. Sebuah instance merangkum kesalahan atau peringatan dapat dilaporkan tunggal. Dia juga menyediakan konteks dan petunjuk yang berlaku pada pesan, dan penciri unik yang digunakan untuk tujuan penyaringan.

Argumen pembangun adalah:

**`level`**

  Kesederhanaan dari pesan. Gunakan satu dari nilai-nilai yang sudah ditentukan: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`. Jika tingkatan lebih hebat atau sama dengan `ERROR`, kemudian Django akan mencegah perintah pengelolaan dari menjalankan. Pesan-pesan dengan tingkatan lebih rendah dari `ERROR` (yaitu peringatan) dilaporkan ke konsol, tetapi dapat disenyapkan.

**`msg`**

  Deretan kalimat (kurang dari 80 karakter) pendek menggambarkan masalah. Deretan kalimat seharusnya *tidak* mengandung baris baru.

**`hint`**

  Deretan karakter baris-tunggal menyediakan petunjuk untuk memperbaiki masalah. Jika tidak ada petunjuk disediakan, atau petunjuk adalah terbukti-sendiri dari pesan kesalahan, petunjuk dapat diabaikan, atau nilai dari `None` dapat digunakan.

**`obj`**

  Pilihan. Sebuah obyek menyediakan konteks untuk pesan (sebagai contoh, model dimana masalah ditemukan). Obyek harus berupa sebuah model, bidang, atau pengelola atau obyek lain yang menentukan sebuah metode `__str__()`. Metode ini digunakan selagi melaporkan semua pesan dan hasilnya mendahului pesan.

**`id`**

  Deretan karakter pilihan. Sebuah penciri unik untuk masalah. Penciri harus mengikuti pola `applabel.X001`, dimana `X` adalah satu dari huruf `CEWID`, menunjukkan kesederhanaan pesan (`C` for kritis, `E` untuk kesalahan dan sebagainya). Angka dapat dialokasikan dengan aplikasi, tetapi harus unik dalam aplikasi itu.

Ada subkelas-subkelas untuk membuat pesan dengan tingkatan umum lebih mudah. Ketika menggunakan mereka anda dapat megnabaikan argumen `level` karena dia disisipkan oleh nama kelas.

#### `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)`

## Etiket siap pakai

Sistem pemeriksaan Django diorganisasikan menggunakan etiket berikut:

- `admin`: Memeriksa pernyataan situs admin apapun.
- `async_support`: Memeriksa konfigurasi terkait-asinkron.
- `caches`: Memeriksa penyimpanan konfigurasi terkait.
- `compatibility`: Masalah potensial tanda dengan versi ditingkatkan.
- `database`: Checks database-related configuration issues. Database checks
  are not run by default because they do more than static code analysis as
  regular checks do. They are only run by the [`migrate`](/id/4.0/ref/django-admin/#django-admin-migrate) command or if
  you specify configured database aliases using the `--database` option when
  calling the [`check`](/id/4.0/ref/django-admin/#django-admin-check) command.
- `files`: Checks files related configuration.
- `models`: Memeriksa bidang model, bidang, dan pengertian pengelolaan.
- `security`: Memeriksa keamanan konfigurasi terkait.
- `signals`: Memeriksa pada pernyataan sinyal dan penangan pendaftaran.
- `sites`: Memeriksa konfigurasi [`django.contrib.sites`](/id/4.0/ref/contrib/sites/#module-django.contrib.sites).
- `staticfiles`: Memeriksa konfigurasi [`django.contrib.staticfiles`](/id/4.0/ref/contrib/staticfiles/#module-django.contrib.staticfiles).
- `templates`: Memeriksa cetakan konfigurasi terkait.
- `translation`: Memeriksa terjemahan terkait konfigurasi.
- `urls`: Memeriksa konfigurasi URL.

Beberapa pemeriksaan mungkin didaftarkan dengan banyak etiket.

> **Changed in Django 3.2**
>
> Etiket `sites` telah ditambahkan.

> **Changed in Django 4.0**
>
> Etiket `files` telah ditambahkan.

## Memeriksa sistem inti

### Dukungan asinkronus

Pemeriksanaan berikut mengecek setelan anda untuk [Dukungan asinkronus](/id/4.0/topics/async/):

- **async.E001**: You should not set the [`DJANGO_ALLOW_ASYNC_UNSAFE`](/id/4.0/topics/async/#envvar-DJANGO_ALLOW_ASYNC_UNSAFE)
  environment variable in deployment. This disables [async safety
  protection](/id/4.0/topics/async/#async-safety).

### Kesesuaian kebelakang

Peringatan pemeriksaan kesesuaian dari kemungkinan masalah-masalah yang akan muncul setelah meningkatkan Django.

- **2\_0.W001**: pola URL anda `<pattern>` mempunyai sebuah `route` yang mengandung `(?P<`, dimulai dengan `^`, atau berakhir dengan `$`. Ini sepertinya sebuah kelalaian ketika memindahkan dari `url()` ke [`path()`](/id/4.0/ref/urls/#django.urls.path).
- **4\_0.E001**: As of Django 4.0, the values in the
  [`CSRF_TRUSTED_ORIGINS`](/id/4.0/ref/settings/#std-setting-CSRF_TRUSTED_ORIGINS) setting must start with a scheme (usually
  `http://` or `https://`) but found `<hostname>`.

### Tembolok

Pemeriksaan berikut memeriksa bahwa pengaturan [`CACHES`](/id/4.0/ref/settings/#std-setting-CACHES) anda dengan benar dikonfigurasi:

- **caches.E001**: Anda harus menentukan sebuah penyimpanan `'default'` di pengaturan [`CACHES`](/id/4.0/ref/settings/#std-setting-CACHES).
- **caches.W002**: Your `<cache>` configuration might expose your cache or
  lead to corruption of your data because its
  [`LOCATION`](/id/4.0/ref/settings/#std-setting-CACHES-LOCATION) matches/is inside/contains
  [`MEDIA_ROOT`](/id/4.0/ref/settings/#std-setting-MEDIA_ROOT)/[`STATIC_ROOT`](/id/4.0/ref/settings/#std-setting-STATIC_ROOT)/[`STATICFILES_DIRS`](/id/4.0/ref/settings/#std-setting-STATICFILES_DIRS).
- **caches.W003**: `<cache>` cache [`LOCATION`](/id/4.0/ref/settings/#std-setting-CACHES-LOCATION) anda itu relatif. Gunakan jalur mutlak sebagai gantinya.

### Basisdata

#### MySQL dan MariaDB

Jika anda menggunakan MySQL atau MariaDB, pemeriksaan berikut akan dilakukan:

- **mysql.E001**: MySQL/MariaDB does not allow unique `CharField`s to have a
  `max_length` \> 255. *This check was changed to* `mysql.W003` *in Django
  3.1 as the real maximum size depends on many factors.*
- **mysql.W002**: MySQL/MariaDB Strict Mode is not set for database connection
  `<alias>`. See also [Mengatur sql\_mode](/id/4.0/ref/databases/#mysql-sql-mode).
- **mysql.W003**: MySQL/MariaDB may not allow unique `CharField`s to have a
  `max_length` \> 255.

### Mengelola berkas

> **New in Django 4.0**

The following checks verify your setup for [Mengelola berkas](/id/4.0/topics/files/):

- **files.E001**: The [`FILE_UPLOAD_TEMP_DIR`](/id/4.0/ref/settings/#std-setting-FILE_UPLOAD_TEMP_DIR) setting refers to the
  nonexistent directory `<path>`.

### Bidang-bidang model

- **fields.E001**: Nama bidang tidak boleh berakhir dengan garis bawah.
- **fields.E002**: Nama bidang tidak harus mengandung `"__"`.
- **fields.E003**: `pk` adalah kata terpesan yang tidak dapat digunakan sebagai nama bidang.
- **fields.E004**: `choices` harus dapat berulang (misalnya, daftar atau tuple).
- **fields.E005**: `choices` must be an iterable containing `(actual value,
  human readable name)` tuples.
- **fields.E006**: `db_index` harus berupa `None`, `True` atau `False`.
- **fields.E007**: Primary key tidak harus mempunyai `null=True`.
- **fields.E008**: Semua `validators` harus dapat dipanggil.
- **fields.E009**: `max_length` terlalu kecil untuk mengisi nilai terpanjang dalam `choices` (karakter `<count>`).
- **fields.E010**: `<field>` default should be a callable instead of an
  instance so that it's not shared between all field instances.
- **fields.E100**: AutoField harus disetel primary\_key=True.
- **fields.E110**: `BooleanField` tidak menerima nilai null. *Pemeriksaan ini muncul sebelum dukungan untuk nilai null telah ditambahkan pada Django 2.1.*
- **fields.E120**: `CharField` harus menentukan atribut `max_length`.
- **fields.E121**: `max_length` harus integer positif.
- **fields.W122**: `max_length` diabaikan ketika digunakan dengan `<integer field type>`.
- **fields.E130**: `DecimalField` harus ditentukan atribut `decimal_places`.
- **fields.E131**: `decimal_places` harus berupa integer bukan-negatif.
- **fields.E132**: `DecimalField` harus ditentukan atribut `max_digits`.
- **fields.E133**: `max_digits` must be a positive integer.
- **fields.E134**: `max_digits` harus lebih besar atau sama dengan `decimal_places`.
- **fields.E140**: `FilePathField` harus mempunyai salah satu `allow_files` atau `allow_folders` disetel ke True.
- **fields.E150**: `GenericIPAddressField`s cannot have `blank=True` if
  `null=False`, as blank values are stored as nulls.
- **fields.E160**: Pilihan `auto_now`, `auto_now_add`, dan `default` saling eksklusif. Hanya satu dari pilihan-pilihan ini mungkin dihadirkan.
- **fields.W161**: Nilai awal tetap disediakan.
- **fields.W162**: `<database>` tidak mendukung indeks basisdata di kolom `<field data type>`.
- **fields.E170**: `BinaryField`’s `default` cannot be a string. Use bytes
  content instead.
- **fields.E180**: `<database>` tidak mendukung `JSONField`s.
- **fields.E190**: `<database>` tidak mendukung pengumpulan basis data pada `<field_type>`s.
- **fields.E900**: `IPAddressField` telah dipindahkan kecuali untuk dukungan dalam riwayat perpindahan.
- *fields.W900\**: `IPAddressField` telah diusangkan. Dukung untuk dia (kecuali dalam riwayat perpindahan) akan dipindahkan di Django 1.9. *Pemeriksaan ini muncul di Django 1.7 and 1.8*.
- **fields.W901**: `CommaSeparatedIntegerField` telah diusangkan. mendukung untk itu (kecuali dalam riwayat perpindahan) akan dipindahkan di Django 2.0. *Pemeriksaan ini muncul dalam Django 1.10 dan 1.11*.
- **fields.E901**: `CommaSeparatedIntegerField` dipindahkan untuk dukungan dalam riwayat perpindahan.
- **fields.W902**: `FloatRangeField` is deprecated and will be removed in
  Django 3.1. *This check appeared in Django 2.2 and 3.0*.
- **fields.W903**: `NullBooleanField` is deprecated. Support for it (except
  in historical migrations) will be removed in Django 4.0. *This check appeared
  in Django 3.1 and 3.2*.
- **fields.E903**: `NullBooleanField` is removed except for support in
  historical migrations.
- **fields.W904**: `django.contrib.postgres.fields.JSONField` is deprecated.
  Support for it (except in historical migrations) will be removed in Django
  4.0. *This check appeared in Django 3.1 and 3.2*.
- **fields.E904**: `django.contrib.postgres.fields.JSONField` is removed
  except for support in historical migrations.

#### Bidang-bidang berkas

- **fields.E200**: `unique` bukan argumen sah untuk `FileField`. *Pemeriksaan ini dipindahkan dalam Django 1.11*.
- **fields.E201**: `primary_key` bukan argumen sah untuk `FileField`.
- **fields.E202**: Argumen `upload_to` FileField\`\`harus berupa jalur bergantung, bukan jalur mutlak.
- **fields.E210**: Tidak dapat menggunakan `ImageField` karena Pillow tidak dipasang.

#### Bidang-bidang terhubung

- **fields.E300**: Bidang menentukan hubungan dengan model `<model>`, yang salah satu tidak dipasang atau abstrak.
- **fields.E301**: Field defines a relation with the model
  `<app_label>.<model>` which has been swapped out.
- **fields.E302**: Reverse accessor for `<app_label>.<model>.<field name>`
  clashes with field name `<app_label>.<model>.<field name>`.
- **fields.E303**: Reverse query name for `<app_label>.<model>.<field name>`
  clashes with field name `<app_label>.<model>.<field name>`.
- **fields.E304**: Reverse accessor for `<app_label>.<model>.<field name>`
  clashes with reverse accessor for `<app_label>.<model>.<field name>`.
- **fields.E305**: Reverse query name for `<app_label>.<model>.<field name>`
  clashes with reverse query name for `<app_label>.<model>.<field name>`.
- **fields.E306**: The name `<name>` is invalid `related_name` for field
  `<model>.<field name>`.
- **fields.E307**: Bidang `<app label>.<model>.<field name>` telah dinyatakan dengan acuan lazy ke `<app label>.<model>`, tetapi aplikasi `<app label>` tidak terpasang atau tidak menyediakan model `<model>`.
- **fields.E308**: Nama permintaan kebalikan `1` jangan berakhir dengan garis bawah.
- **fields.E309**: Nama permintaan kebalikan `1` jangan mengandung `'__'`.
- **fields.E310**: No subset of the fields `<field1>`, `<field2>`, ... on
  model `<model>` is unique.
- **fields.E311**: `<model>.<field name>` must be unique because it is
  referenced by a `ForeignKey`.
- **fields.E312**: `to_field` `1` tidak ada pada model terkait `2.3`.
- **fields.E320**: Bidang menentukan `on_delete=SET_NULL`, tetapi tidak dapat berupa null.
- **fields.E321**: Bidang menentukan `on_delete=SET_DEFAULT`, tetapi tidak mempunyai nilai awal.
- **fields.E330**: `ManyToManyField` tidak dapat unik.
- **fields.E331**: Bidang menentukan hubungan many-to-many melalui model `<model>`, yang belum dipasang.
- **fields.E332**: Many-to-many fields with intermediate tables must not be
  symmetrical. *This check appeared before Django 3.0.*
- **fields.E333**: Model digunakan sebagai model menengah oleh `<model>`, tetapi itu mempunyai lebih dari dua foreign key pada `<model>`, yang memiliki dua makna. Anda harus menentukan dua foreign key Django yang mana harus digunakan melalui argumen kata kunci `through_fields`.
- **fields.E334**: Model digunakan sebagai model menengah oleh `<model>`, tetapi itu mempunyai lebih dari satu foreign key pada `<model>`, yang memiliki dua makna. Anda harus menentukan foreign key Django mana yang harus digunakan melalui argumen kata kunci `through_fields`.
- **fields.E335**: Model digunakan sebagai model menengah oleh `<model>`, tetapi itu mempunyai lebih dari satu foreign key pada `<model>`, yang memiliki dua makna. Anda harus menentukan foreign key Django mana yang harus digunakan melalui argumen kata kunci `through_fields`.
- **fields.E336**: Model digunakan sebagai model menengah oleh `<model>`, tetapi itu tidak mempunyai foreign key pada `<model>` or `<model>`.
- **fields.E337**: Bidang menentukan `through_fields` tetapi tidak menyediakan nama-nama dari dua bidang kaitan yang harus digunakan untuk hubungan `<model>`.
- **fields.E338**: Model perantara `<through model>` tidak mempunyai bidang `<field name>`.
- **fields.E339**: `<model>.<field name>` bukan foreign key pada `<model>`.
- **fields.E340**: Bidang tabel menengah `1` tabrakan dengan nama tabel dari `2`/`3.4`.
- **fields.W340**: `null` tidak mempunyai efek pada `ManyToManyField`.
- **fields.W341**: `ManyToManyField` tidak mendukung `validators`.
- **fields.W342**: Mengatur `unique=True` pada `ForeignKey` mempunyai efek sama ketika menggunakan `OneToOneField`.
- **fields.W343**: `limit_choices_to` has no effect on `ManyToManyField`
  with a `through` model. *This check appeared before Django 4.0.*
- **fields.W344**: The field's intermediary table `<table name>` clashes with
  the table name of `<model>`/`<model>.<field name>`.
- **fields.W345**: `related_name` has no effect on `ManyToManyField` with a
  symmetrical relationship, e.g. to "self".

### Model

- **models.E001**: `<swappable>` bukan dari formulir `app_label.app_name`.
- **models.E002**: `<SETTING>` acuan `<model>`, yang belum dipasang, atau abstrak.
- **models.E003**: Model emiliki dua kemiripan hubungan many-to-many melalui model menengah `<app_label>.<model>`.
- **models.E004**: `id` dapat hanya digunakan sebagai nama bidang jika bidang juga disetel `primary_key=True`.
- **models.E005**: Bidang  `<field name>` dari model induk `<model>` bentrok dengan bidang  `<field name>` dari model induk `<model>`.
- **models.E006**: The field `<field name>` clashes with the field
  `<field name>` from model `<model>`.
- **models.E007**: Field `<field name>` mempunyai nama kolom `<column name>` yang digunakan oleh bidang lain.
- **models.E008**: `index_together` harus berupa daftar atau tuple.
- **models.E009**: Semua unsur `index_together` harus berupa daftar atau tuple.
- **models.E010**: `unique_together` harus berupa daftar atau tuple.
- **models.E011**: Semua unsur `unique_together` harus berupa daftar atau tuple.
- **models.E012**: `constraints/indexes/index_together/unique_together`
  refers to the nonexistent field `<field name>`.
- **models.E013**: `constraints/indexes/index_together/unique_together`
  refers to a `ManyToManyField` `<field name>`, but `ManyToManyField`s
  are not supported for that option.
- **models.E014**: `ordering` harus berupa tuple atau daftar (bahkan jika anda ingin memesan hanya satu bidang).
- **models.E015**: `ordering` refers to the nonexistent field, related field,
  or lookup `<field name>`.
- **models.E016**: `constraints/indexes/index_together/unique_together`
  refers to field `<field_name>` which is not local to model `<model>`.
- **models.E017**: Model proxy `<model>` mengandung bidang-bidang model.
- **models.E018**: Nama kolom otomatis dibangkitkan terlalu panjang untuk bidang  `<field>`. Panjang maksimum adalah `<maximum length>` untuk basisdata `<alias>`.
- **models.E019**: Nama kolom otomatis dibangkitkan terlalu panjang untuk bidang M2M `<M2M field>`. Panjang maksimum adalah `<maximum length>` untuk basisdata `<alias>`.
- **models.E020**: Cara kelas `<model>.check()` saat ini dikesampingkan.
- **models.E021**: `ordering` dan `order_with_respect_to` tidak dapat digunakan bersama-sama.
- **models.E022**: `<function>` mengandung acuan lazy pada `<app label>.<model>`, tetapi aplikasi `<app label>` tidak dipasang atau tidak menyediakan model `<model>`.
- **models.E023**: Nama model `1` tidak dapat mulai atau berakhir dengan sebuah garis bawah ketika itu bertabrakan dengan sintaksis penacrian permintaan.
- **models.E024**: Nama model `1` tidak dapat mengandung garis bawah ganda ketika itu bertabrakan dengan sintaksis pencarian permintaan.
- **models.E025**: Sifat `<property name>` bertabrakan dengan pengakses bidang terkait.
- **models.E026**: Model tidak boleh memiliki lebih dari satu bidang dengan `primary_key=True`.
- **models.W027**: `<database>` tidak mendukung batasan pemeriksaan.
- **models.E028**: `db_table` `<db_table>` digunakan oleh banyak model: `<model list>`.
- **models.E029**: nama indeks `<index>` bukan unik untuk model `<model>`.
- **models.E030**: index name `<index>` is not unique among models:
  `<model list>`.
- **models.E031**: batasan nama `<constraint>` bukan unik untuk model `<model>`.
- **models.E032**: constraint name `<constraint>` is not unique among
  models: `<model list>`.
- **models.E033**: Nama indeks `<index>` tidak dapat dimulai dengan garis bawah atau angka.
- **models.E034**: Nama indeks `<index>` tidak dapat lebih panjang daripada `<max_length>` karakter.
- **models.W035**: `db_table` `<db_table>` digunakan oleh banyak model: `<model list>`.
- **models.W036**: `<database>` does not support unique constraints with
  conditions.
- **models.W037**: `<database>` does not support indexes with conditions.
- **models.W038**: `<database>` does not support deferrable unique
  constraints.
- **models.W039**: `<database>` does not support unique constraints with
  non-key columns.
- **models.W040**: `<database>` does not support indexes with non-key
  columns.
- **models.E041**: `constraints` refers to the joined field `<field name>`.
- **models.W042**: Auto-created primary key used when not defining a primary
  key type, by default `django.db.models.AutoField`.
- **models.W043**: `<database>` does not support indexes on expressions.
- **models.W044**: `<database>` does not support unique constraints on
  expressions.

### Keamanan

The security checks do not make your site secure. They do not audit code, do
intrusion detection, or do anything particularly complex. Rather, they help
perform an automated, low-hanging-fruit checklist, that can help you to improve
your site's security.

Beberapa pemeriksaan ini mungkin tidak sesuai untuk konfigurasi penyebaran tertentu anda. Sebagai contoh, jika anda melakukan pengalihan HTTP ke HTTPS anda dalam sebuah  penyeimbang beban, itu akan menjengkelkan terus-menerus diperingati mengenai tidak memiliki [`SECURE_SSL_REDIRECT`](/id/4.0/ref/settings/#std-setting-SECURE_SSL_REDIRECT) diadakan. Gunakan [`SILENCED_SYSTEM_CHECKS`](/id/4.0/ref/settings/#std-setting-SILENCED_SYSTEM_CHECKS) untuk mendiamkan pemeriksaan yang tidak dibutuhkan

Pemeriksaan berikut berjalan jika anda menggunakan pilihan [`check --deploy`](/id/4.0/ref/django-admin/#cmdoption-check-deploy):

- **security.W001**: You do not have
  [`django.middleware.security.SecurityMiddleware`](/id/4.0/ref/middleware/#django.middleware.security.SecurityMiddleware) in your
  [`MIDDLEWARE`](/id/4.0/ref/settings/#std-setting-MIDDLEWARE) so the [`SECURE_HSTS_SECONDS`](/id/4.0/ref/settings/#std-setting-SECURE_HSTS_SECONDS),
  [`SECURE_CONTENT_TYPE_NOSNIFF`](/id/4.0/ref/settings/#std-setting-SECURE_CONTENT_TYPE_NOSNIFF), [`SECURE_REFERRER_POLICY`](/id/4.0/ref/settings/#std-setting-SECURE_REFERRER_POLICY),
  [`SECURE_CROSS_ORIGIN_OPENER_POLICY`](/id/4.0/ref/settings/#std-setting-SECURE_CROSS_ORIGIN_OPENER_POLICY), and
  [`SECURE_SSL_REDIRECT`](/id/4.0/ref/settings/#std-setting-SECURE_SSL_REDIRECT) settings will have no effect.
- **security.W002**: Anda tidak mempunyai  [`django.middleware.clickjacking.XFrameOptionsMiddleware`](/id/4.0/ref/middleware/#django.middleware.clickjacking.XFrameOptionsMiddleware) dalam [`MIDDLEWARE`](/id/4.0/ref/settings/#std-setting-MIDDLEWARE), sehingga halaman anda tidak akan dilayani dalam sebuah kepala `'x-frame-options'`.  Meskipun ada alasan bagus untuk situs anda dilayani di sebuah kerangka, anda harus mempertimbangkan mengadakan kepala ini untuk membantu mencegah serangan clickjacking.
- **security.W003**: Anda sepertinya tidak menggunakan perlindungan siap-pakai cross-site request forgery  Django melalui middleware ([`django.middleware.csrf.CsrfViewMiddleware`](/id/4.0/ref/middleware/#django.middleware.csrf.CsrfViewMiddleware) tidak dalam pengaturan [`MIDDLEWARE`](/id/4.0/ref/settings/#std-setting-MIDDLEWARE) anda). Mengadakan middleware adalah pendekatan teraman untuk memastikan anda tidak meninggalkan celah apapun.
- **security.W004**: Anda belum menyetel sebuah nilai untuk pengaturan [`SECURE_HSTS_SECONDS`](/id/4.0/ref/settings/#std-setting-SECURE_HSTS_SECONDS). Jika keseluruhan situs anda hanya terhadap SSL, anda mungkin ingin mempertimbangkan pengaturan sebuah nilai dan mengadakan [HTTP Strict Transport Security](/id/4.0/ref/middleware/#http-strict-transport-security). Pastikan membaca dokumentasi dahulu; mengadakan HSTS tanpa bertanggung jawab dapat menyebabkan serius, masalah tidak dapat diubah.
- **security.W005**: Anda belum menyetel pengaturan [`SECURE_HSTS_INCLUDE_SUBDOMAINS`](/id/4.0/ref/settings/#std-setting-SECURE_HSTS_INCLUDE_SUBDOMAINS) menjadi `True`. Tanpa ini, situs anda berpotensi rentan pada serangan melalui hubungan tidak aman ke subranah. Hanya setel ini menjadi `True` jika anda yakin bajwa semua subranah dari ranah anda harus dilayani secara khusus melalui SSL.
- **security.W006**: Pengaturan [`SECURE_CONTENT_TYPE_NOSNIFF`](/id/4.0/ref/settings/#std-setting-SECURE_CONTENT_TYPE_NOSNIFF) anda tidak disetel menjadi `True`, sehingga halaman anda tidak akan dilayani dengan sebuah kepala `'X-Content-Type-Options: nosniff'`. Anda harus mempertimbangankan mengadakan kepala ini untuk mencegah peramban dari mencirikan jenis-jenis isi dengan tidak benar.
- **security.W007**: Your `SECURE_BROWSER_XSS_FILTER` setting is not
  set to `True`, so your pages will not be served with an
  `'X-XSS-Protection: 1; mode=block'` header. You should consider enabling
  this header to activate the browser's XSS filtering and help prevent XSS
  attacks. *This check is removed in Django 3.0 as the* `X-XSS-Protection`
  *header is no longer honored by modern browsers.*
- **security.W008**: Pengaturan [`SECURE_SSL_REDIRECT`](/id/4.0/ref/settings/#std-setting-SECURE_SSL_REDIRECT) anda tidak disetel menjadi `True`. Meskipun situs anda harus tersedia terhadap kedua hubungan SSL dan bukan-SSL, anda mungkin ingin antara menyetel pengaturan ini menjadi `True` atau konfigurasi sebuah penyeimbang muatan atau peladen membalikkan-proxy ke mengalihkan semua hubungan pada HTTPS.
- **security.W009**: Your [`SECRET_KEY`](/id/4.0/ref/settings/#std-setting-SECRET_KEY) has less than 50 characters,
  less than 5 unique characters, or it's prefixed with `'django-insecure-'`
  indicating that it was generated automatically by Django. Please generate a
  long and random `SECRET_KEY`, otherwise many of Django's security-critical
  features will be vulnerable to attack.
- **security.W010**: Anda memiliki [`django.contrib.sessions`](/id/4.0/topics/http/sessions/#module-django.contrib.sessions) di [`INSTALLED_APPS`](/id/4.0/ref/settings/#std-setting-INSTALLED_APPS) anda tetapi anda belum menyetel [`SESSION_COOKIE_SECURE`](/id/4.0/ref/settings/#std-setting-SESSION_COOKIE_SECURE) menjadi `True`. Menggunakan kue sesi hanya-aman membuatnya lebih sulit untuk lalu lintas jaringan sapu tangan untuk membajak sesi pengguna.
- **security.W011**: Anda memiliki [`django.contrib.sessions.middleware.SessionMiddleware`](/id/4.0/ref/middleware/#django.contrib.sessions.middleware.SessionMiddleware) dalam [`MIDDLEWARE`](/id/4.0/ref/settings/#std-setting-MIDDLEWARE) anda, tetapi anda belum menyetel [`SESSION_COOKIE_SECURE`](/id/4.0/ref/settings/#std-setting-SESSION_COOKIE_SECURE) menjadi `True`. Menggunakan sesi kue hanya-aman membuatnya lebih sulit untuk pencium lalu lintas jaringan membajak sesi pengguna.
- **security.W012**: [`SESSION_COOKIE_SECURE`](/id/4.0/ref/settings/#std-setting-SESSION_COOKIE_SECURE) tidak disetel menjadi `True`. Menggunakan kue sesi hanya-aman membuatnya lebih sulit untuk lalu lintas jaringan sapu tangan untuk membajak sesi pengguna.
- **security.W013**: Anda memiliki [`django.contrib.sessions`](/id/4.0/topics/http/sessions/#module-django.contrib.sessions) di [`INSTALLED_APPS`](/id/4.0/ref/settings/#std-setting-INSTALLED_APPS) anda, tetapi anda belum menyetel [`SESSION_COOKIE_HTTPONLY`](/id/4.0/ref/settings/#std-setting-SESSION_COOKIE_HTTPONLY) menjadi `True`. Menggunakan kue sesi `HttpOnly`  membuatnya lebih sulit untuk serangan penulisan lintas-situs untuk membajak sesi pengguna.
- **security.W014**: Anda memiliki [`django.contrib.sessions.middleware.SessionMiddleware`](/id/4.0/ref/middleware/#django.contrib.sessions.middleware.SessionMiddleware) dalam [`MIDDLEWARE`](/id/4.0/ref/settings/#std-setting-MIDDLEWARE) anda, tetapi anda belum menyetel [`SESSION_COOKIE_HTTPONLY`](/id/4.0/ref/settings/#std-setting-SESSION_COOKIE_HTTPONLY) menjadi `True`. Menggunakan sebuah sesi kue `HttpOnly` membuatnya itu lebih sulit untuk serangan cross-site scripting untuk membajaksesi pengguna.
- **security.W015**: [`SESSION_COOKIE_HTTPONLY`](/id/4.0/ref/settings/#std-setting-SESSION_COOKIE_HTTPONLY) tidak disetel menjadi `True`. Menggunakan kue sesi `HttpOnly` membuatnya lebih sulit untuk serangan penulisan lintas-situs untuk membajak sesi pengguna.
- **security.W016**: [`CSRF_COOKIE_SECURE`](/id/4.0/ref/settings/#std-setting-CSRF_COOKIE_SECURE) tidak disetel menjadi `True`. Menggunakan kue CSRF hanya-aman membuatnya lebih sulit untuk lalu lintas jaringan sapu tangan untuk mencuri token CSRF.
- **security.W017**: [`CSRF_COOKIE_HTTPONLY`](/id/4.0/ref/settings/#std-setting-CSRF_COOKIE_HTTPONLY) is not set to `True`.
  Using an `HttpOnly` CSRF cookie makes it more difficult for cross-site
  scripting attacks to steal the CSRF token. *This check is removed in Django
  1.11 as the* [`CSRF_COOKIE_HTTPONLY`](/id/4.0/ref/settings/#std-setting-CSRF_COOKIE_HTTPONLY) *setting offers no practical
  benefit.*
- *security.W018\**: Anda harus mempunyai [`DEBUG`](/id/4.0/ref/settings/#std-setting-DEBUG) disetel ke `True` dalam menyebarkan.
- **security.W019**: You have
  [`django.middleware.clickjacking.XFrameOptionsMiddleware`](/id/4.0/ref/middleware/#django.middleware.clickjacking.XFrameOptionsMiddleware) in your
  [`MIDDLEWARE`](/id/4.0/ref/settings/#std-setting-MIDDLEWARE), but [`X_FRAME_OPTIONS`](/id/4.0/ref/settings/#std-setting-X_FRAME_OPTIONS) is not set to
  `'DENY'`. Unless there is a good reason for your site to serve other parts
  of itself in a frame, you should change it to `'DENY'`.
- **security.W020**: [`ALLOWED_HOSTS`](/id/4.0/ref/settings/#std-setting-ALLOWED_HOSTS) harus tidak kosong dalam menyebarkan.
- **security.W021**: Anda belum menyetel pengaturan [`SECURE_HSTS_PRELOAD`](/id/4.0/ref/settings/#std-setting-SECURE_HSTS_PRELOAD) menjadi `True`. Tanpa ini, situs anda tidak dapat diajukan ke daftar pramuat peramban.
- **security.W022**: You have not set the [`SECURE_REFERRER_POLICY`](/id/4.0/ref/settings/#std-setting-SECURE_REFERRER_POLICY)
  setting. Without this, your site will not send a Referrer-Policy header. You
  should consider enabling this header to protect user privacy.
- **security.E023**: Anda telah mensetel pengaturan [`SECURE_REFERRER_POLICY`](/id/4.0/ref/settings/#std-setting-SECURE_REFERRER_POLICY) menjadi nilai tidak sah.
- **security.E024**: You have set the
  [`SECURE_CROSS_ORIGIN_OPENER_POLICY`](/id/4.0/ref/settings/#std-setting-SECURE_CROSS_ORIGIN_OPENER_POLICY) setting to an invalid value.

The following checks verify that your security-related settings are correctly
configured:

- **security.E100**: `DEFAULT_HASHING_ALGORITHM` must be `'sha1'` or
  `'sha256'`. *This check appeared in Django 3.1 and 3.2*.
- **security.E101**: The CSRF failure view `'path.to.view'` does not take the
  correct number of arguments.
- **security.E102**: The CSRF failure view `'path.to.view'` could not be
  imported.

### Sinyal

- **signals.E001**: `<handler>` telah terhubung ke sinyal `<signal>` dengan acuan lazy ke pengirim `<app label>.<model>`, tetapi aplikasi `<app label>` tidak terpasang atau tidak menyediakan model `<model>`.

### Templat

Pemeriksaan berikut memeriksa bahwa pengaturan [`TEMPLATES`](/id/4.0/ref/settings/#std-setting-TEMPLATES) anda dengan benar dikonfigurasi:

- **templates.E001**: Anda mempunyai `'APP_DIRS': True` di [`TEMPLATES`](/id/4.0/ref/settings/#std-setting-TEMPLATES) anda tetapi juga menentukan `'loaders'` di `OPTIONS`. Antara memindahkan `APP_DIRS` atau memindahkan pilihan `'loaders'`.
- **templates.E002**: `string_if_invalid` di setting:TEMPLATES [`OPTIONS`](/id/4.0/ref/settings/#std-setting-TEMPLATES-OPTIONS) harus berupa string tetapi mendapatkan: `{value}` (`{type}`).

### Terjemahan

Pemeriksaan berikut dilakukan pada konfigurasi terjemahan anda:

- **translation.E001**: Anda telah menyediakan nilai tidak sah untuk pengaturan [`LANGUAGE_CODE`](/id/4.0/ref/settings/#std-setting-LANGUAGE_CODE): `<value>`.
- **translation.E002**:  Anda telah menyediakan kode bahasa tidak sah dalam [`LANGUAGES`](/id/4.0/ref/settings/#std-setting-LANGUAGES) setting: `<value>`.
- **translation.E003**: Anda telah menyediakan kode bahasa tidak sah dalam pengaturan [`LANGUAGES_BIDI`](/id/4.0/ref/settings/#std-setting-LANGUAGES_BIDI): `<value>`.
- **translation.E004**: Anda telah menyediakan sebuah nilai untuk pengaturan [`LANGUAGE_CODE`](/id/4.0/ref/settings/#std-setting-LANGUAGE_CODE) yang tidak di dalam pengaturan [`LANGUAGES`](/id/4.0/ref/settings/#std-setting-LANGUAGES).

### URL

Pemeriksaan berikut dilakukan di konfigurasi URL anda:

- **urls.W001**: Pola URL anda `<pattern>` menggunakan [`include()`](/id/4.0/ref/urls/#django.urls.include) dengan `route` akhiran `$`. Memindahkan dolar dari `route` untuk menghindari masalah termasuk URL.
- **urls.W002**: Pola URL anda `<pattern>` mempunyai `route` dimulai dengan sebuah `/`. Pindahkan garis miring ini ketika itu tidak dibutuhkan. Jika pola ini disasarkan dalam sebuah [`include()`](/id/4.0/ref/urls/#django.urls.include), pastikan pola [`include()`](/id/4.0/ref/urls/#django.urls.include) mempunyai buntutan `/`.
- **urls.W003**: Corak `<pattern>` URL mempunyai `name` termasuk sebuah `:`. Pindahkan titik dua, untuk menghindari dua arti acuan namespace.
- **urls.E004**: Pola URL anda `<pattern>` tidak sah. Pastikan bahwa `urlpatterns` adalah daftar dari [`path()`](/id/4.0/ref/urls/#django.urls.path) dan/atau contoh [`re_path()`](/id/4.0/ref/urls/#django.urls.re_path).
- **urls.W005**: namespace URL `1` tidak unik. Anda mungkin tidak dapat membalikkan semua URL dalam namespace ini.
- **urls.E006**: pengaturan [`MEDIA_URL`](/id/4.0/ref/settings/#std-setting-MEDIA_URL)/ [`STATIC_URL`](/id/4.0/ref/settings/#std-setting-STATIC_URL) harus berakhir dengan sebuah garis miring.
- **urls.E007**: Tampilan `handlerXXX` penyesuaian `'path.to.view'` tidak mengambil angka benar dari argumen (…).
- **urls.E008**: Tampilan penyesuaian\`\`handlerXXX\`\` `'path.to.view'` tidak dapat diterapkan.
- **urls.E009**: Your URL pattern `<pattern>` has an invalid view, pass
  `<view>.as_view()` instead of `<view>`.

## Pemeriksaan aplikasi `contrib`

### `admin`

Admin memeriksa semua yang dilakukan sebagai bagian dari etiket `admin`.

Pemeriksaan berikut dilakukan pada setiap [`ModelAdmin`](/id/4.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin) (atau subkelas) yang terdaftar dengan situs admin:

- **admin.E001**: Nilai dari `raw_id_fields` harus berupa daftar atau tuple.
- **admin.E002**: The value of `raw_id_fields[n]` refers to `<field name>`,
  which is not a field of `<model>`.
- **admin.E003**: Nilai dari `raw_id_fields[n]` harus foreign key atau bidang many-to-many.
- **admin.E004**: Nilai-nilai dari `fields` harus berupa daftar atau tuple.
- **admin.E005**: kedua `fieldsets` dan `fields` ditentukan.
- **admin.E006**: Nilai dari `fields` mengandung bidang ganda.
- **admin.E007**: Nilai dari `fieldsets` harus berupa daftar atau tuple.
- **admin.E008**: Nilai dari `fieldsets[n]` harus berupa daftar atau tuple.
- **admin.E009**: Nilai dari `fieldsets[n]` harus panjang 2.
- **admin.E010**: Nilai dari `fieldsets[n][1]` harus berupa kamus.
- **admin.E011**: Nilai dari `fieldsets[n][1]` harus mengandung kunci `fields`.
- **admin.E012**: Ada bidang ganda dalam `fieldsets[n][1]`.
- **admin.E013**: `fields[n]/fieldsets[n][m]` tidak dapat menyertakan `<field name>` `ManyToManyField`, karena bidang itu secara manual menentukan sebuah hubungan model.
- **admin.E014**: Nilai dari `exclude` harus berupa daftar atau tuple.
- **admin.E015**: Nilai dari `exclude` mengandung bidang ganda.
- **admin.E016**: Nilai dari `form` harus warisan dari `BaseModelForm`.
- **admin.E017**: Nilai dari `filter_vertical` harus berupa daftar atau tuple.
- **admin.E018**: Nilai-nilai dari `filter_horizontal` harus berupa daftar atau tuple.
- **admin.E019**: The value of `filter_vertical[n]/filter_horizontal[n]`
  refers to `<field name>`, which is not a field of `<model>`.
- **admin.E020**: The value of `filter_vertical[n]/filter_horizontal[n]`
  must be a many-to-many field.
- **admin.E021**: Nilai dari `radio_fields` harus berupa kamus.
- **admin.E022**: The value of `radio_fields` refers to `<field name>`,
  which is not a field of `<model>`.
- **admin.E023**: The value of `radio_fields` refers to `<field name>`,
  which is not an instance of `ForeignKey`, and does not have a `choices`
  definition.
- **admin.E024**: Nilai dari `radio_fields[<field name>]` harus berupa `admin.HORIZONTAL` atau `admin.VERTICAL`.
- **admin.E025**: Nilai dari `view_on_site` harus berupa callable atau nilai boolean.
- **admin.E026**: Nilai dari `prepopulated_fields` harus berupa kamus.
- **admin.E027**: The value of `prepopulated_fields` refers to
  `<field name>`, which is not a field of `<model>`.
- **admin.E028**: Nilai dari `prepopulated_fields` mengacu pada `<field name>`, yang harus tidak berupa sebuah bidang `DateTimeField`, `ForeignKey`, `OneToOneField`, atau `ManyToManyField`.
- **admin.E029**: Nilai dari `prepopulated_fields[<field name>]` harus berupa daftar atau tuple.
- **admin.E030**: The value of `prepopulated_fields` refers to
  `<field name>`, which is not a field of `<model>`.
- **admin.E031**: Nilai dari `ordering` harus berupa daftar atau tuple.
- **admin.E032**: Nilai dari `ordering` mempunyai pembuat urutan acak `?`, tetapi mengandung bidang lain juga.
- **admin.E033**: The value of `ordering` refers to `<field name>`, which
  is not a field of `<model>`.
- **admin.E034**: Nilai dari `readonly_fields` harus berupa sebuah daftar atau tuple.
- **admin.E035**: Nilai dari `readonly_fields[n]` adalah tidak callable, sebuah atribut dari `<ModelAdmin class>`, atau sebuah atribut dari `<model>`.
- **admin.E036**: Nilai dari `autocomplete_fields` harus berupa list atau tuple.
- **admin.E037**: The value of `autocomplete_fields[n]` refers to
  `<field name>`, which is not a field of `<model>`.
- **admin.E038**: Nilai dari `autocomplete_fields[n]` harus berupa sebuah foreign key atau bidang many-to-many.
- **admin.E039**: Sebuah admin untuk model `<model>` harus didaftarkan untuk diacukan oleh `<modeladmin>.autocomplete_fields`.
- **admin.E040**: `<modeladmin>` harus menentukan `search_fields`, karena itu diacukan oleh\`\`\<other\_modeladmin\>.autocomplete\_fields\`\`.

#### `ModelAdmin`

Pemeriksaan berikut dilakukan di setiap [`ModelAdmin`](/id/4.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin) yang terdaftar dengan situs admin:

- **admin.E101**: Nilai dari `save_as` harus boolean.
- **admin.E102**: Nilai dari `save_on_top` harus boolean.
- **admin.E103**: Nilai dari `inlines` harus berupa sebuahd daftar atau tuple.
- **admin.E104**: `<InlineModelAdmin class>` harus mewarisi dari `InlineModelAdmin`.
- **admin.E105**: `<InlineModelAdmin class>` harus mempunyai atribut `model`.
- **admin.E106**: Nilai dari `<InlineModelAdmin class>.model` harus berupa `Model`.
- **admin.E107**: Nilai dari `list_display` harus berupa daftar atau tuple.
- **admin.E108**: Nilai dari `list_display[n]` merujuk pada\`\`\<label\>\`\`, yang merupakan bukan callable, sebuah atribut dari `<ModelAdmin class>`, atau sebuah atribut atau metode di `<model>`.
- **admin.E109**: Nilai dari `list_display[n]` harus tidak berupa bidang `ManyToManyField`.
- **admin.E110**: Nilai dari `list_display_links` harus berupa daftar, tuple atau `None`.
- **admin.E111**: Nilai dari `list_display_links[n]` mengacu pada `<label>`, yang tidak ditentukan di `list_display`.
- **admin.E112**: Nilai dari `list_filter` harus berupa daftar atau tuple.
- **admin.E113**: Nilai dari `list_filter[n]` harus warisan dari `ListFilter`.
- **admin.E114**: Nilai dari `list_filter[n]` harus bukan warisan dari `FieldListFilter`.
- **admin.E115**: Nilai dari `list_filter[n][1]` harus warisan dari `FieldListFilter`.
- **admin.E116**: Nilai dari `list_filter[n]` mengacu pada `<label>`, yang bukan mengacu pada sebuah Bidang.
- **admin.E117**: Nilai dari `list_select_related` harus berupa boolean, tuple atau daftar.
- **admin.E118**: Nilai dari `list_per_page` harus berupa integer.
- **admin.E119**: Nilai dari `list_max_show_all` harus berupa integer.
- **admin.E120**: Nilai dari `list_editable` harus berupa sebuah daftar atau tuple.
- **admin.E121**: The value of `list_editable[n]` refers to `<label>`,
  which is not a field of `<model>`.
- **admin.E122**: Nilai dari `list_editable[n]` mengacu pada `<label>`, yang tidak berisi di `list_display`.
- **admin.E123**: Nilai dari `list_editable[n]` tidak dapat di kedua `list_editable` dan `list_display_links`.
- **admin.E124**: Nilai dari `list_editable[n]` mengacu pada bidang pertama di `list_display` (`<label>`), yang tidak dapat digunakan meskipun `list_display_links` disetel.
- **admin.E125**: Nilai dari `list_editable[n]` mengacu pada `<field name>`, yang tidak dapat disunting melalui admin.
- **admin.E126**: Nilai dari `search_fields` harus berupa sebuah daftar atau tuple.
- **admin.E127**: Nilai dari `date_hierarchy` mengacu pada `<field name>`, yang tidak mengacu ke sebuah Bidang.
- **admin.E128**: Nilai dari `date_hierarchy` harus berupa `DateField` atau `DateTimeField`.
- **admin.E129**: `<modeladmin>` harus menentukan metode `has_<foo>_permission()` untuk tindakan `<action>`.
- **admin.E130**: `__name__` attributes of actions defined in
  `<modeladmin>` must be unique. Name `<name>` is not unique.

#### `InlineModelAdmin`

Pemeriksaan berikut dilakukan pada setiap [`InlineModelAdmin`](/id/4.0/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin) yang didaftarkan sebagai sebaris pada [`ModelAdmin`](/id/4.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin).

- **admin.E201**: Tidak dapat mengeluarkan bidang `<field name>`, karena itu adalah foreign key pada model induk `<app_label>.<model>`.
- **admin.E202**: `<model>` has no `ForeignKey` to `<parent model>`./
  `<model>` has more than one `ForeignKey` to `<parent model>`. You must
  specify a `fk_name` attribute.
- **admin.E203**: Nilai dari `extra` harus berupa integer.
- **admin.E204**: Nilai `max_num` harus berupa integer.
- **admin.E205**: Nilai `min_num` harus berupa integer.
- **admin.E206**: Nilai dari `formset` harus warisan dari `BaseModelFormSet`.

#### `GenericInlineModelAdmin`

Pemeriksaan berikut dilakukan pada setiap `GenericInlineModelAdmin` yang didaftarkan sebagai berderet pada [`ModelAdmin`](/id/4.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin).

- **admin.E301**: `'ct_field'` acuan `<label>`, yang bukan bidang di `<model>`.
- **admin.E302**: `'ct_fk_field'` acuan `<label>`, yang bukan bidang pada `<model>`.
- **admin.E303**: `<model>` tidak mempunyai `GenericForeignKey`.
- **admin.E304**: `<model>` tidak mempunyai `GenericForeignKey` menggunakan `<field name>` bidang jenis isi dan `<field name>` bidang ID obyek.

#### `AdminSite`

Pemeriksaan berikut dilakukan pada awalan [`AdminSite`](/id/4.0/ref/contrib/admin/#django.contrib.admin.AdminSite):

- **admin.E401**: [`django.contrib.contenttypes`](/id/4.0/ref/contrib/contenttypes/#module-django.contrib.contenttypes) harus di [`INSTALLED_APPS`](/id/4.0/ref/settings/#std-setting-INSTALLED_APPS) untuk menggunakan aplikasi admin.
- **admin.E402**: [`django.contrib.auth.context_processors.auth`](/id/4.0/ref/templates/api/#django.contrib.auth.context_processors.auth) harus diadakan dalam [`DjangoTemplates`](/id/4.0/topics/templates/#django.template.backends.django.DjangoTemplates) ([`TEMPLATES`](/id/4.0/ref/settings/#std-setting-TEMPLATES)) jika menggunakan autentifikasi backend awalan untuk menggunakan aplikasi admin.
- **admin.E403**: Sebuah contoh [`django.template.backends.django.DjangoTemplates`](/id/4.0/topics/templates/#django.template.backends.django.DjangoTemplates) harus dikonfigurasi dalam [`TEMPLATES`](/id/4.0/ref/settings/#std-setting-TEMPLATES) untuk menggunakan aplikasi admin.
- **admin.E404**: `django.contrib.messages.context_processors.messages` harus diadakan dalam [`DjangoTemplates`](/id/4.0/topics/templates/#django.template.backends.django.DjangoTemplates) ([`TEMPLATES`](/id/4.0/ref/settings/#std-setting-TEMPLATES)) untuk menggunakan aplikasi admin.
- **admin.E405**: [`django.contrib.auth`](/id/4.0/topics/auth/#module-django.contrib.auth) harus berada dalam [`INSTALLED_APPS`](/id/4.0/ref/settings/#std-setting-INSTALLED_APPS) untuk menggunakan aplikasi admin.
- **admin.E406**: [`django.contrib.messages`](/id/4.0/ref/contrib/messages/#module-django.contrib.messages) harus berada dalam [`INSTALLED_APPS`](/id/4.0/ref/settings/#std-setting-INSTALLED_APPS) utnuk menggunakan aplikasi admin.
- **admin.E408**: [`django.contrib.auth.middleware.AuthenticationMiddleware`](/id/4.0/ref/middleware/#django.contrib.auth.middleware.AuthenticationMiddleware) harus berada dalam [`MIDDLEWARE`](/id/4.0/ref/settings/#std-setting-MIDDLEWARE) untuk menggunakan aplikasi admin.
- **admin.E409**: [`django.contrib.messages.middleware.MessageMiddleware`](/id/4.0/ref/middleware/#django.contrib.messages.middleware.MessageMiddleware) harus berada dalam [`MIDDLEWARE`](/id/4.0/ref/settings/#std-setting-MIDDLEWARE) untuk menggunakan aplikasi admin.
- **admin.E410**: [`django.contrib.sessions.middleware.SessionMiddleware`](/id/4.0/ref/middleware/#django.contrib.sessions.middleware.SessionMiddleware) harus berada dalam [`MIDDLEWARE`](/id/4.0/ref/settings/#std-setting-MIDDLEWARE) untuk menggunakan aplikasi admin.
- **admin.W411**: `django.template.context_processors.request` must be
  enabled in [`DjangoTemplates`](/id/4.0/topics/templates/#django.template.backends.django.DjangoTemplates)
  ([`TEMPLATES`](/id/4.0/ref/settings/#std-setting-TEMPLATES)) in order to use the admin navigation sidebar.

### `auth`

- **auth.E001**: `REQUIRED_FIELDS` harus berupa daftar atau rekaman.
- **auth.E002**: Bidang bernama sebagai `USERNAME_FIELD` untuk model pengguna penyesuaian harus tidak disertakan di `REQUIRED_FIELDS`.
- **auth.E003**: `<field>` harus unik karena itu dinamai sebagai `USERNAME_FIELD`.
- **auth.W004**: `<field>` dinamai sebagai `USERNAME_FIELD`, tetapi itu tidak unik.
- **auth.E005**: Nama kode perizinan `<codename>` bentrok dengan perizinan siap pakai untuk model `<model>`.
- **auth.E006**: Nama kode perizinan `<codename>` digunakan untuk model `<model>`.
- **auth.E007**: [`verbose_name`](/id/4.0/ref/models/options/#django.db.models.Options.verbose_name) dari model `<model>` harus berupa paling banyak 244 karakter untuk nama-nama perizinan siap pakainya menjadi paling banyak 255 karakter.
- **auth.E008**: Perizinan bernama `<name>` dari model `<model>` tidak lebih panjang dari 255 karakter.
- **auth.C009**: `<User model>.is_anonymous` harus berupa sebuah atribut atau sifat daripada sebuah metode. Mengabaikan ini adalah masalah keamanan ketika pengguna anonim akan diperlakukan sebagai terotentifikasi!
- **auth.C010**: `<User model>.is_authenticated` harus berupa sebuah atribut atau sifat daripada sebuah metode. Mengabaikan ini adalah masalah keamanan ketika pengguna anonim akan diperlakukan sebagai terotentifikasi!
- **auth.E011**: The name of model `<model>` must be at most 93 characters
  for its builtin permission names to be at most 100 characters.
- **auth.E012**: The permission codenamed `<codename>` of model `<model>`
  is longer than 100 characters.

### `contenttypes`

Pemeriksaan berikut dilakukan ketika sebuah model mengandung sebuah [`GenericForeignKey`](/id/4.0/ref/contrib/contenttypes/#django.contrib.contenttypes.fields.GenericForeignKey) atau [`GenericRelation`](/id/4.0/ref/contrib/contenttypes/#django.contrib.contenttypes.fields.GenericRelation):

- **contenttypes.E001**: ID obyek `GenericForeignKey` mengacu bidang tidak ada `<field>`.
- **contenttypes.E002**: Jenis isi `GenericForeignKey` mengacu field `<field>` yang tidak ada.
- **contenttypes.E003**: `<field>` bukan `ForeignKey`.
- **contenttypes.E004**: `<field>` bukan `ForeignKey` pada `contenttypes.ContentType`.
- **contenttypes.E005**: Nama-nama model harus paling banyak 100 karakter.

### `postgres`

Pemeriksaan berikut dilakukan pada bidang model [`django.contrib.postgres`](/id/4.0/ref/contrib/postgres/#module-django.contrib.postgres):

- **postgres.E001**: Bidang dasar untuk senarai mempunyai kesalahan: ...
- **postgres.E002**: Bidang dasar untuk senarai tidak dapat berupa bidang terkait.
- **postgres.E003**: `<field>` default should be a callable instead of an
  instance so that it's not shared between all field instances. *This check was
  changed to* `fields.E010` *in Django 3.1*.

### `sites`

Pemeriksaan berikut dilakukan pada setiap model menggunakan [`CurrentSiteManager`](/id/4.0/ref/contrib/sites/#django.contrib.sites.managers.CurrentSiteManager):

- **sites.E001**: `CurrentSiteManager` tidak dapat menemukan sebuah bidang dinamai `<field name>`.
- **sites.E002**: `CurrentSiteManager` tidak dapat menggunakan `<field>` karena itu adalah bukan foreign key atau bidang many-to-many.

The following checks verify that [`django.contrib.sites`](/id/4.0/ref/contrib/sites/#module-django.contrib.sites) is correctly
configured:

- **sites.E101**: The [`SITE_ID`](/id/4.0/ref/settings/#std-setting-SITE_ID) setting must be an integer.

### `staticfiles`

Pemeriksaan berikut mensahkan bahwa [`django.contrib.staticfiles`](/id/4.0/ref/contrib/staticfiles/#module-django.contrib.staticfiles) dikonfigurasi dengan benar.

- **staticfiles.E001**: Pengaturan [`STATICFILES_DIRS`](/id/4.0/ref/settings/#std-setting-STATICFILES_DIRS) bukan tuple atau list.
- **staticfiles.E002**: Pengaturan [`STATICFILES_DIRS`](/id/4.0/ref/settings/#std-setting-STATICFILES_DIRS) harus tidak mengandung pengaturan :setting:STATIC\_ROOT.
- **staticfiles.E003**: Awalan `<prefix>` dalam pengaturan [`STATICFILES_DIRS`](/id/4.0/ref/settings/#std-setting-STATICFILES_DIRS) tidak boleh diakhiri dengan sebuah garis miring.
- **staticfiles.W004**: The directory `<directory>` in the
  [`STATICFILES_DIRS`](/id/4.0/ref/settings/#std-setting-STATICFILES_DIRS) does not exist.
