---
title: "Kerangka pemeriksaan sistem"
version: 1.11
locale: id
source: https://docs.djangoproject.com/id/1.11/ref/checks/
canonical: https://djangodocs.dev/id/1.11/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/1.11/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 menjadi model, bidang, atau pengelola atau obyek lain apapun yang menentukan cara `__str__` (pada Python 2 anda butuh menentukan cara `__unicode__`). Cara 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.
- `caches`: Memeriksa penyimpanan konfigurasi terkait.
- `compatibility`: Masalah potensial tanda dengan versi ditingkatkan.
- `database`: Memeriksa masalah-masalah konfigurasi terkait-basisdata. Pemeriksaan basisdata tidak berjalan secara awal karena mereka melakukan lebih dar analisa kode tetap seperti pemeriksaan biasa lakukan. Mereka hanya berjalan oleh perintah [`migrate`](/id/1.11/ref/django-admin/#django-admin-migrate) atau jika anda menentukan etiket `database` ketika memanggil perintah [`check`](/id/1.11/ref/django-admin/#django-admin-check).
- `models`: Memeriksa bidang model, bidang, dan pengertian pengelolaan.
- `security`: Memeriksa keamanan konfigurasi terkait.
- `signals`: Memeriksa pada pernyataan sinyal dan penangan pendaftaran.
- `templates`: Memeriksa cetakan konfigurasi terkait.
- `urls`: Memeriksa konfigurasi URL.

Beberapa pemeriksaan mungkin didaftarkan dengan banyak etiket.

## Memeriksa sistem inti

### Kesesuaian kebelakang

Pemeriksaan berikut dilakukan untuk memperingati pengguna dari setiap kemungkinan masalah yang mungkin muncul sebagai sebuah hasil dari versi peningkatan.

- **1\_6.W001**: Beberapa deretan satuan proyek mungkin tidak dikerjakan sesuai harapan. *Pemeriksaan ini telah dipindahkan di Django 1.8 karena menjadi salah positof*.
- **1\_6.W002**: `BooleanField` tidak mempunyai nilai awal. *Pemeriksaan ini dipindahkan di Django 1.8 karena positif salah*.
- **1\_7.W001**: Django 1.7 merubah awal global untuk `MIDDLEWARE_CLASSES.` `django.contrib.sessions.middleware.SessionMiddleware`, `django.contrib.auth.middleware.AuthenticationMiddleware`, dan `django.contrib.messages.middleware.MessageMiddleware` dipindahkan dari awal. Jika proyek anda butuh middleware ini lalu anda harus mengkonfigurasi pengaturan ini. *Pemeriksaan ini dipindahkan di Django 1.9*.
- **1\_8.W001**: Pengaturan `TEMPLATE_*` berdiri sendiri telah diusangkan di Django 1.8 dan kamus [`TEMPLATES`](/id/1.11/ref/settings/#std-setting-TEMPLATES) mengambil hak lebih tinggi. Anda harus menaruh nilai-nilai dari pengaturan berikut kedalam `TEMPLATES` kamus: `TEMPLATE_DIRS`, `TEMPLATE_CONTEXT_PROCESSORS`, `TEMPLATE_DEBUG`, `TEMPLATE_LOADERS`, `TEMPLATE_STRING_IF_INVALID`.
- **1\_10.W001**: Pengaturan `MIDDLEWARE_CLASSES` diusangkan di Django 1.10 dan pengaturan [`MIDDLEWARE`](/id/1.11/ref/settings/#std-setting-MIDDLEWARE) mengambil hak lebih tinggi. Sejak anda telah menyetel `MIDDLEWARE`, nilai dari `MIDDLEWARE_CLASSES` diabaikan.

### Tembolok

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

- **caches.E001**: Anda harus menentukan sebuah penyimpanan `'default'` di pengaturan [`CACHES`](/id/1.11/ref/settings/#std-setting-CACHES).

### Basisdata

#### MySQL

Jika anda sedang menggunakan MySQL, pemeriksaan berikut akan dilakukan:

- **mysql.E001**: MySQL tidak mengizinkan `CharField`s unik mempunyai `max_length` \> 255.
- **mysql.W002**: MySQL Strict Mode tidak disetel untuk hubungan basisdata '\<alias\>'. Lihat juga [Mengatur sql\_mode](/id/1.11/ref/databases/#mysql-sql-mode).

### 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 (sebagai contoh, daftar atau tuple).
- **fields.E005**: `choices` harus dapat berulang mengembalikan tuple `(nilai sebenarnya, nama yang dapat dibaca manusia)`.
- **fields.E006**: `db_index` harus berupa `None`, `True` atau `False`.
- **fields.E007**: Primary key tidak harus mempunyai `null=True`.
- **fields.E100**: AutoField harus disetel primary\_key=True.
- **fields.E110**: `BooleanField` tidak menerima nilai-nilai null.
- **fields.E120**: `CharField` harus menentukan atribut `max_length`.
- **fields.E121**: `max_length` harus integer positif.
- **fields.W122**: `max_length` diabaikan ketika digunakan dengan `IntegerField`.
- **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` harus berupa integer bukan-negatif.
- **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` tidak dapat menerima nilai-nilai kosong jika nilai-nilai null tidak diijinkan, sebagai nilai-nilai kosong disimpan sebagai null.
- **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.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. Dukungan untuknya (kecuali di perpindahan bersejarah) akan dipindahkan di Django 2.0.

#### 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**: Bidang menentukan hubungan dengan model `<model>` yang telah ditukar.
- **fields.E302**: Accessor untuk bidang `<field name>` bentrok dengan bidang `<field name>`.
- **fields.E303**: Membalikkan permintaan nama untuk bidang `<field name>` bentrok dengan bidang `<field name>`.
- **fields.E304**: Nama bidang `<field name>` bentrok dengan accessor untuk `<field name>`.
- **fields.E305**: Nama bidang `<field name>` bentrok dengan nama membalikkan permintaan untuk `<field name>`.
- **fields.E306**: Nama terhubung harus penciri Python sah atau diakhiri dengan sebuah `'+'`.
- **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**: Bukan bagian dari bidang-bidang `<field1>`, `<field2>`, ... pada model `<model>` adalah unik. Tambah `unique=True` pada setiap dari bidang-bidang tersebut atau menambah setidaknya sebuah bagian dari mereka ke batasan unique\_together.
- **fields.E311**: `<model>` harus menyetel `unique=True` karena itu adalah dihubungkan oleh `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**: Bidang many-to-many dengan tabel pertengahan harus tidak simetris.
- **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` tidak mempunyai pengaruh pada `ManyToManyField` dengan model `through`.

### Model

- **models.E001**: `<swappable>` bukan dari formulir `app_label.app_name`.
- **models.E002**: `<SETTING>` acuan `<model>`, yang belum dipasang, atau abstrak.
- **models.E003**: Model mempunyai 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**: Bidang bentrok dengan bidang `<field name>` dari 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**: `index_together/unique_together` mengacu pada bidang tidak ada `<field name>`.
- **models.E013**: `index_together/unique_together` mengacu pada `ManyToManyField` `<field name>`, tetapi `ManyToManyField` tidak didukung untuk pilihan itu.
- **models.E014**: `ordering` harus berupa tuple atau daftar (bahkan jika anda ingin memesan hanya satu bidang).
- **models.E015**: `ordering` mengacu pada bidang tidak ada `<field name>`.
- **models.E016**: `index_together/unique_together` mengacu pada bidang `<field_name>` yang bukan lokal ke 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.

### Keamanan

Pemeriksaan keamanan tidak membuat situs anda aman. Mereka tidak memeriksa kode, melalui pengenalan gangguan, atau melakukan apapun khususnya yang rumit. Tentu saja, mereka membantu melakukan sebuah otomatis, daftar centang yang mudah dijangkau. Mereka membantu anda mengingat hal-hal sederhana yang meningkatkan keamanan situs anda.

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/1.11/ref/settings/#std-setting-SECURE_SSL_REDIRECT) diadakan. Gunakan [`SILENCED_SYSTEM_CHECKS`](/id/1.11/ref/settings/#std-setting-SILENCED_SYSTEM_CHECKS) untuk mendiamkan pemeriksaan yang tidak dibutuhkan

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

- **security.W001**: Anda tidak mempunyai [`django.middleware.security.SecurityMiddleware`](/id/1.11/ref/middleware/#django.middleware.security.SecurityMiddleware) in your [`MIDDLEWARE`](/id/1.11/ref/settings/#std-setting-MIDDLEWARE)/[`MIDDLEWARE_CLASSES`](/id/1.11/ref/settings/#std-setting-MIDDLEWARE_CLASSES) jadi pengaturan [`SECURE_HSTS_SECONDS`](/id/1.11/ref/settings/#std-setting-SECURE_HSTS_SECONDS), [`SECURE_CONTENT_TYPE_NOSNIFF`](/id/1.11/ref/settings/#std-setting-SECURE_CONTENT_TYPE_NOSNIFF), [`SECURE_BROWSER_XSS_FILTER`](/id/1.11/ref/settings/#std-setting-SECURE_BROWSER_XSS_FILTER), dan :setting:SECURE\_SSL\_REDIRECT\`tidak akan mempunyai pengaruh.
- **security.W002**: Anda tidak mempunyai [`django.middleware.clickjacking.XFrameOptionsMiddleware`](/id/1.11/ref/middleware/#django.middleware.clickjacking.XFrameOptionsMiddleware) di [`MIDDLEWARE`](/id/1.11/ref/settings/#std-setting-MIDDLEWARE)/[`MIDDLEWARE_CLASSES`](/id/1.11/ref/settings/#std-setting-MIDDLEWARE_CLASSES) anda, jadi halaman anda tidak akan dilayani dengan sebuah kepala `'x-frame-options'`. Meskipun ada alasan bagus untuk situs anda dilayani dalam sebuah kerangka, anda harus mempertimbangkan mengadakan kepala ini untuk membantu mencegah serangan clickjacking.
- **security.W003**: Anda tidak tampak menggunakan perlindungan pemalsuan permintaan lintas-situs siap pakai Django melalui middleware ([`django.middleware.csrf.CsrfViewMiddleware`](/id/1.11/ref/middleware/#django.middleware.csrf.CsrfViewMiddleware) tidak di [`MIDDLEWARE`](/id/1.11/ref/settings/#std-setting-MIDDLEWARE)/[`MIDDLEWARE_CLASSES`](/id/1.11/ref/settings/#std-setting-MIDDLEWARE_CLASSES) anda). Mengadakan middleware adalah pendekatan teraman untuk memastikan anda tidak meninggalkan lubang apapun.
- **security.W004**: Anda belum menyetel sebuah nilai untuk pengaturan [`SECURE_HSTS_SECONDS`](/id/1.11/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/1.11/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/1.11/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/1.11/ref/settings/#std-setting-SECURE_CONTENT_TYPE_NOSNIFF) anda tidak disetel menjadi `True`, jadi halaman anda tidak akan dilayani dengan kepala `'x-content-type-options: nosniff'`. Anda harus mempertimbangkan mengadakan kepala ini untuk mencegah peramban dari menciri jenis isi secara tidak benar.
- **security.W007**: Pengaturan [`SECURE_BROWSER_XSS_FILTER`](/id/1.11/ref/settings/#std-setting-SECURE_BROWSER_XSS_FILTER) anda disetel menjadi `True`, jadi halaman anda tidak akan dilayani dengan kepala `'x-xss-protection: 1; mode=block'`. Anda harus mempertimbangkan mengadakan kepala ini untuk mengaktifkan penyaringan XSS peramban dan membantu mencegah serangan XSS.
- **security.W008**: Pengaturan [`SECURE_SSL_REDIRECT`](/id/1.11/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**: [`SECRET_KEY`](/id/1.11/ref/settings/#std-setting-SECRET_KEY) anda mempunyai kurang dari 50 karakter atau kurang dari 5 karakter unik. Harap bangkitkan sebuah `SECRET_KEY` panjang dan acak, jika tidak banyak dari fitur-fitur kritis-keamanan Django akan rentan pada serangan.
- **security.W010**: Anda memiliki [`django.contrib.sessions`](/id/1.11/topics/http/sessions/#module-django.contrib.sessions) di [`INSTALLED_APPS`](/id/1.11/ref/settings/#std-setting-INSTALLED_APPS) anda tetapi anda belum menyetel [`SESSION_COOKIE_SECURE`](/id/1.11/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 mempunyai [`django.contrib.sessions.middleware.SessionMiddleware`](/id/1.11/ref/middleware/#django.contrib.sessions.middleware.SessionMiddleware) di [`MIDDLEWARE`](/id/1.11/ref/settings/#std-setting-MIDDLEWARE)/[`MIDDLEWARE_CLASSES`](/id/1.11/ref/settings/#std-setting-MIDDLEWARE_CLASSES) anda, tetapi anda belum menyetel [`SESSION_COOKIE_SECURE`](/id/1.11/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.W012**: [`SESSION_COOKIE_SECURE`](/id/1.11/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/1.11/topics/http/sessions/#module-django.contrib.sessions) di [`INSTALLED_APPS`](/id/1.11/ref/settings/#std-setting-INSTALLED_APPS) anda, tetapi anda belum menyetel [`SESSION_COOKIE_HTTPONLY`](/id/1.11/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 mempunyai [`django.contrib.sessions.middleware.SessionMiddleware`](/id/1.11/ref/middleware/#django.contrib.sessions.middleware.SessionMiddleware) di [`MIDDLEWARE`](/id/1.11/ref/settings/#std-setting-MIDDLEWARE)/[`MIDDLEWARE_CLASSES`](/id/1.11/ref/settings/#std-setting-MIDDLEWARE_CLASSES) anda, tetapi anda belum menyetel [`SESSION_COOKIE_HTTPONLY`](/id/1.11/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.W015**: [`SESSION_COOKIE_HTTPONLY`](/id/1.11/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/1.11/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/1.11/ref/settings/#std-setting-CSRF_COOKIE_HTTPONLY) tidak disetel menjadi `True`. Menggunakan sebuah kue CSRF `HttpOnly` membuatnya lebih sulit untuk serangan cross-site scripting untuk mencuri token CSRF *Pemeriksaan ini dipindahkan dalam Django 1.11 ketika* pengaturan [`CSRF_COOKIE_HTTPONLY`](/id/1.11/ref/settings/#std-setting-CSRF_COOKIE_HTTPONLY) \* tidak menawarkan keuntungan berguna.\*
- *security.W018\**: Anda harus mempunyai [`DEBUG`](/id/1.11/ref/settings/#std-setting-DEBUG) disetel ke `True` dalam menyebarkan.
- **security.W019**: Anda mempunyai [`django.middleware.clickjacking.XFrameOptionsMiddleware`](/id/1.11/ref/middleware/#django.middleware.clickjacking.XFrameOptionsMiddleware) di [`MIDDLEWARE`](/id/1.11/ref/settings/#std-setting-MIDDLEWARE)/[`MIDDLEWARE_CLASSES`](/id/1.11/ref/settings/#std-setting-MIDDLEWARE_CLASSES) anda, tetapi [`X_FRAME_OPTIONS`](/id/1.11/ref/settings/#std-setting-X_FRAME_OPTIONS) tidak disetel menjadi `'DENY'`. Awalan adalah `'SAMEORIGIN'`, tetapi meskipun ada alasan bagus untuk situs anda untuk melayani bagian lain dari itu sendiri dalam sebuah kerangka, anda harus merubah itu menjadi `'DENY'`.
- **security.W020**: [`ALLOWED_HOSTS`](/id/1.11/ref/settings/#std-setting-ALLOWED_HOSTS) harus tidak kosong dalam menyebarkan.
- **security.W021**: Anda belum menyetel pengaturan [`SECURE_HSTS_PRELOAD`](/id/1.11/ref/settings/#std-setting-SECURE_HSTS_PRELOAD) menjadi `True`. Tanpa ini, situs anda tidak dapat diajukan ke daftar pramuat peramban.

### 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/1.11/ref/settings/#std-setting-TEMPLATES) anda dengan benar dikonfigurasi:

- **templates.E001**: Anda mempunyai `'APP_DIRS': True` di [`TEMPLATES`](/id/1.11/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/1.11/ref/settings/#std-setting-TEMPLATES-OPTIONS) harus berupa string tetapi mendapatkan: `{value}` (`{type}`).

### URL

Pemeriksaan berikut dilakukan di konfigurasi URL anda:

- **urls.W001**: Corak `<pattern>` URL anda menggunakan [`include()`](/id/1.11/ref/urls/#django.conf.urls.include) dengan sebuah `regex` berakhir dengan sebuah `$`. Pindahkan dolar dari `regex` untuk menghindari masalah-masalah termasuk URL.
- **urls.W002**: Corak `<pattern>` URL anda mempunyai `regex` diawali dengan sebuah `/`. Pindahkan garis miring ini ketika itu tidak dibutuhkan. Jika corak ini adalah disasar di sebuah [`include()`](/id/1.11/ref/urls/#django.conf.urls.include), pastikan corak [`include()`](/id/1.11/ref/urls/#django.conf.urls.include) mempunyai buntutan `/`.
- **urls.W003**: Corak `<pattern>` URL mempunyai `name` termasuk sebuah `:`. Pindahkan titik dua, untuk menghindari dua arti acuan namespace.
- **urls.E004**: Corak `<pattern>` URL anda tidak sah. Pastikan bahwa `urlpatterns` adalah sebuah daftar dari instance [`url()`](/id/1.11/ref/urls/#django.conf.urls.url).
- **urls.W005**: namespace URL `1` tidak unik. Anda mungkin tidak dapat membalikkan semua URL dalam namespace ini.
- **urls.E006**: pengaturan [`MEDIA_URL`](/id/1.11/ref/settings/#std-setting-MEDIA_URL)/ [`STATIC_URL`](/id/1.11/ref/settings/#std-setting-STATIC_URL) harus berakhir dengan sebuah garis miring.

## Pemeriksaan aplikasi `contrib`

### `admin`

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

Pemeriksaan berikut dilakukan pada setiap [`ModelAdmin`](/id/1.11/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**: Nilai dari `raw_id_fields[n]` mengacu pada `<field name>`, yang bukan sebuah atribut dari `<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**: Nilai dari `filter_vertical[n]/filter_vertical[n]` mengacu pada `<field name>`, yang bukan sebuah atribut dari `<model>`.
- **admin.E020**: Nilai dari `filter_vertical[n]/filter_vertical[n]` harus berupa bidang many-to-many.
- **admin.E021**: Nilai dari `radio_fields` harus berupa kamus.
- **admin.E022**: Nilai dari `radio_fields` mengacu pada `<field name>`, yang bukan sebuah atribut dari `<model>`.
- **admin.E023**: Nilai dari `radio_fields` mengacu pada `<field name>`, yang bukan `ForeignKey`, dan tidak mempunyai pengertian `choices`.
- **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**: Nilai dari `prepopulated_fields` mengacu pada `<field name>`, yang bukan sebuah atribut dari `<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**: Nilai dari `prepopulated_fields` mengacu pada `<field name>`, yang bukan sebuah atribut dari `<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**: Nilai dari `ordering` mengacu pada `<field name>`, yang bukan sebuah atribut dari `<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>`.

#### `ModelAdmin`

Pemeriksaan berikut dilakukan di setiap [`ModelAdmin`](/id/1.11/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**: Nilai dari `list_editable[n]` mengacu pada `<field label>`, yang bukan sebuah atribut dari `<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`.

#### `InlineModelAdmin`

Pemeriksaan berikut dilakukan pada setiap [`InlineModelAdmin`](/id/1.11/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin) yang didaftarkan sebagai sebaris pada [`ModelAdmin`](/id/1.11/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>` tidak mempunyai `ForeignKey` pada `<parent model>`./ `<model>` mempunyai lebih dari satu `ForeignKey` pada `<parent model>`.
- **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/1.11/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/1.11/ref/contrib/admin/#django.contrib.admin.AdminSite):

- **admin.E401**: [`django.contrib.contenttypes`](/id/1.11/ref/contrib/contenttypes/#module-django.contrib.contenttypes) harus di [`INSTALLED_APPS`](/id/1.11/ref/settings/#std-setting-INSTALLED_APPS) untuk menggunakan aplikasi admin.
- **admin.E402**: [`django.contrib.auth.context_processors.auth`](/id/1.11/ref/templates/api/#django.contrib.auth.context_processors.auth) harus di [`TEMPLATES`](/id/1.11/ref/settings/#std-setting-TEMPLATES) untuk menggunakan aplikasi admin.

### `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/1.11/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!

### `contenttypes`

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

- **contenttypes.E001**: ID obyek mengacu field `<field>` yang tidak-ada.
- **contenttypes.E002**: Jenis isi `GenericForeignKey` mengacu field `<field>` yang tidak-ada.
- **contenttypes.E003**: `<field>` bukan `ForeignKey`.
- **contenttypes.E004**: `<field>` bukan `ForeignKey` pada `contenttypes.ContentType`.

### `sites`

Pemeriksaan berikut dilakukan pada setiap model menggunakan [`CurrentSiteManager`](/id/1.11/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.
