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.
Acuan API¶
CheckMessage¶
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:
levelKesederhanaan dari pesan. Gunakan satu dari nilai-nilai yang sudah ditentukan:
DEBUG,INFO,WARNING,ERROR,CRITICAL. Jika tingkatan lebih hebat atau sama denganERROR, kemudian Django akan mencegah perintah pengelolaan dari menjalankan. Pesan-pesan dengan tingkatan lebih rendah dariERROR(yaitu peringatan) dilaporkan ke konsol, tetapi dapat disenyapkan.msgDeretan kalimat (kurang dari 80 karakter) pendek menggambarkan masalah. Deretan kalimat seharusnya tidak mengandung baris baru.
hintDeretan 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
Nonedapat digunakan.objPilihan. 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.idDeretan karakter pilihan. Sebuah penciri unik untuk masalah. Penciri harus mengikuti pola
applabel.X001, dimanaXadalah satu dari hurufCEWID, menunjukkan kesederhanaan pesan (Cfor kritis,Euntuk 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.
Memeriksa sistem inti¶
Dukungan asinkronus¶
Pemeriksanaan berikut mengecek setelan anda untuk Dukungan asinkronus:
async.E001: You should not set the
DJANGO_ALLOW_ASYNC_UNSAFEenvironment variable in deployment. This disables async safety protection.
Kesesuaian kebelakang¶
Peringatan pemeriksaan kesesuaian dari kemungkinan masalah-masalah yang akan muncul setelah meningkatkan Django.
2_0.W001: pola URL anda
<pattern>mempunyai sebuahrouteyang mengandung(?P<, dimulai dengan^, atau berakhir dengan$. Ini sepertinya sebuah kelalaian ketika memindahkan dariurl()kepath().4_0.E001: Seperti Django 4.0, nilai dalam pengaturan
CSRF_TRUSTED_ORIGINSharus dimulai dengan skema (biasanyahttp://atauhttps://) tetapi ditemukan<hostname>.
Tembolok¶
Pemeriksaan berikut memeriksa bahwa pengaturan CACHES anda dengan benar dikonfigurasi:
caches.E001: Anda harus menentukan sebuah penyimpanan
'default'di pengaturanCACHES.caches.W002: Konfigurasi
<cache>anda mungkin membuka cache atau menuju korupsi data anda karenaLOCATIONmatches/is inside/containsMEDIA_ROOT/STATIC_ROOT/STATICFILES_DIRS.caches.W003:
<cache>cacheLOCATIONanda 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 tidak mengizinkan
CharFieldunik memilikimax_length> 255. Pemeriksaan ini berubah padamysql.W003di Django 3.1 ketika ukuran asli maksimal bergantung pada banyak faktor.mysql.W002: MySQL/MariaDB Strict Mode is not set for database connection
<alias>. Lihat juga Mengatur sql_mode.mysql.W003: MySQL/MariaDB mungkin tidak mengizinkan
CharFielduntuk memilikimax_length> 255.
Mengelola berkas¶
Pemeriksaan berikut memeriksa setelan anda untuk for Mengelola berkas:
files.E001: Pengaturan
FILE_UPLOAD_TEMP_DIRmengacu pada direktori tidak ada<path>.
Bidang-bidang model¶
fields.E001: Nama bidang tidak boleh berakhir dengan garis bawah.
fields.E002: Nama bidang tidak harus mengandung
"__".fields.E003:
pkadalah kata terpesan yang tidak dapat digunakan sebagai nama bidang.fields.E004:
choicesmust be a mapping (e.g. a dictionary) or an iterable (e.g. a list or tuple).fields.E005:
choicesmust be a mapping of actual values to human readable names or an iterable containing(actual value, human readable name)tuples.fields.E006:
db_indexharus berupaNone,TrueatauFalse.fields.E007: Primary key tidak harus mempunyai
null=True.fields.E008: Semua
validatorsharus dapat dipanggil.fields.E009:
max_lengthterlalu kecil untuk mengisi nilai terpanjang dalamchoices(karakter<count>).fields.E010:
<field>awalan harus dapat dipanggil daripada sebuah instance sehingga dia tidak dibagi diantara semua bidang instance.fields.E011:
<database>does not support default database values with expressions (db_default).fields.E012:
<expression>cannot be used indb_default.fields.E100: ``AutoField harus disetel primary_key=True.
fields.E110:
BooleanFieldtidak menerima nilai null. Pemeriksaan ini muncul sebelum dukungan untuk nilai null telah ditambahkan pada Django 2.1.fields.E120:
CharFieldharus menentukan atributmax_length.fields.E121:
max_lengthharus integer positif.fields.W122:
max_lengthdiabaikan ketika digunakan dengan<integer field type>.fields.E130:
DecimalFieldharus ditentukan atributdecimal_places.fields.E131:
decimal_placesharus berupa integer bukan-negatif.fields.E132:
DecimalFieldharus ditentukan atributmax_digits.fields.E133:
max_digitsharus berupa integer positif.fields.E134:
max_digitsharus lebih besar atau sama dengandecimal_places.fields.E140:
FilePathFieldharus mempunyai salah satuallow_filesatauallow_foldersdisetel ke True.fields.E150:
GenericIPAddressFieldtidak boleh memilikiblank=Truejikanull=False, sebagai nilai kosong disimpan sebagai null.fields.E160: Pilihan
auto_now,auto_now_add, dandefaultsaling 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.W163:
<database>tidak mendukung komentatar pada kolom (db_comment).fields.E170:
defaultBinaryField’tidak boleh string. Gunakan isian byte.fields.E180:
<database>tidak mendukungJSONFields.fields.E190:
<database>tidak mendukung pengumpulan basis data pada<field_type>s.fields.E220:
<database>does not supportGeneratedFields.fields.E221:
<database>does not support non-persistedGeneratedFields.fields.E222:
<database>does not support persistedGeneratedFields.fields.E223:
GeneratedField.output_fieldhas errors: ...fields.W224:
GeneratedField.output_fieldhas warnings: ...fields.E900:
IPAddressFieldtelah dipindahkan kecuali untuk dukungan dalam riwayat perpindahan.fields.W900*:
IPAddressFieldtelah 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:
CommaSeparatedIntegerFieldtelah 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:
CommaSeparatedIntegerFielddipindahkan untuk dukungan dalam riwayat perpindahan.fields.W902:
FloatRangeFielddiusangkan dan akan dipindahkan di Django 3.1. Pemeriksaan ini muncul di Django 2.2 dan 3.0.fields.W903:
NullBooleanFielddiusangkan. Dukungan untuk itu (kecuali di perpindahan riwayat) akan dipindahkan di Django 4.0. Pemeriksaan ini muncul di Django 3.1 dan 3.2.fields.E903:
NullBooleanFielddipindahkan kecuali untuk mendukung dalam perpindahan riwayat.fields.W904:
django.contrib.postgres.fields.JSONFielddiusangkan. Dukungan untuk itu (kecuali dalam perpindahan riwayat) akan dipindahkan di Django 4.0. Pemeriksaan ini muncul di Django 3.1 dan 3.2.fields.E904:
django.contrib.postgres.fields.JSONFielddipindahkan kecuali untuk dukungan dalam perpindahan riwayat.fields.W905:
django.contrib.postgres.fields.CICharFieldis deprecated. Support for it (except in historical migrations) will be removed in Django 5.1. This check appeared in Django 4.2 and 5.0.fields.E905:
django.contrib.postgres.fields.CICharFieldis removed except for support in historical migrations.fields.W906:
django.contrib.postgres.fields.CIEmailFieldis deprecated. Support for it (except in historical migrations) will be removed in Django 5.1. This check appeared in Django 4.2 and 5.0.fields.E906:
django.contrib.postgres.fields.CIEmailFieldis removed except for support in historical migrations.fields.W907:
django.contrib.postgres.fields.CITextFieldis deprecated. Support for it (except in historical migrations) will be removed in Django 5.1. This check appeared in Django 4.2 and 5.0.fields.E907:
django.contrib.postgres.fields.CITextFieldis removed except for support for historical migrations.
Bidang-bidang berkas¶
fields.E200:
uniquebukan argumen sah untukFileField. Pemeriksaan ini dipindahkan dalam Django 1.11.fields.E201:
primary_keybukan argumen sah untukFileField.fields.E202: Argumen
upload_to``FileField``harus berupa jalur bergantung, bukan jalur mutlak.fields.E210: Tidak dapat menggunakan
ImageFieldkarena Pillow tidak dipasang.
Model¶
models.E001:
<swappable>bukan dari formulirapp_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:
iddapat hanya digunakan sebagai nama bidang jika bidang juga disetelprimary_key=True.models.E005: Bidang
<field name>dari model induk<model>bentrok dengan bidang<field name>dari model induk<model>.models.E006: Bidang
<field name>bentrokan 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_togethermust be a list or tuple. This check appeared before Django 5.1.models.E009: All
index_togetherelements must be lists or tuples. This check appeared before Django 5.1.models.E010:
unique_togetherharus berupa daftar atau tuple.models.E011: Semua unsur
unique_togetherharus berupa daftar atau tuple.models.E012:
constraints/indexes/unique_togetherrefers to the nonexistent field<field name>.models.E013:
constraints/indexes/unique_togetherrefers to aManyToManyField<field name>, butManyToManyFields are not supported for that option.models.E014:
orderingharus berupa tuple atau daftar (bahkan jika anda ingin memesan hanya satu bidang).models.E015:
orderingmengacu pada bidang tidak ada, bidang terkait, atau pencarian<field name>.models.E016:
constraints/indexes/unique_togetherrefers 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:
orderingdanorder_with_respect_totidak 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
1tidak dapat mulai atau berakhir dengan sebuah garis bawah ketika itu bertabrakan dengan sintaksis penacrian permintaan.models.E024: Nama model
1tidak 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: nama indeks
<index>tidak unik terhadap model:<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:
constraintsrefers 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.models.W045: Check constraint
<constraint>containsRawSQL()expression and won't be validated during the modelfull_clean().models.W046:
<database>does not support comments on tables (db_table_comment).models.W047:
<database>does not support unique constraints with nulls distinct.
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 diadakan. Gunakan SILENCED_SYSTEM_CHECKS untuk mendiamkan pemeriksaan yang tidak dibutuhkan
Pemeriksaan berikut berjalan jika anda menggunakan pilihan check --deploy:
security.W001: You do not have
django.middleware.security.SecurityMiddlewarein yourMIDDLEWAREso theSECURE_HSTS_SECONDS,SECURE_CONTENT_TYPE_NOSNIFF,SECURE_REFERRER_POLICY,SECURE_CROSS_ORIGIN_OPENER_POLICY, andSECURE_SSL_REDIRECTsettings will have no effect.security.W002: Anda tidak mempunyai
django.middleware.clickjacking.XFrameOptionsMiddlewaredalamMIDDLEWARE, 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.CsrfViewMiddlewaretidak dalam pengaturanMIDDLEWAREanda). Mengadakan middleware adalah pendekatan teraman untuk memastikan anda tidak meninggalkan celah apapun.security.W004: Anda belum menyetel sebuah nilai untuk pengaturan
SECURE_HSTS_SECONDS. Jika keseluruhan situs anda hanya terhadap SSL, anda mungkin ingin mempertimbangkan pengaturan sebuah nilai dan mengadakan 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_SUBDOMAINSmenjadiTrue. Tanpa ini, situs anda berpotensi rentan pada serangan melalui hubungan tidak aman ke subranah. Hanya setel ini menjadiTruejika anda yakin bajwa semua subranah dari ranah anda harus dilayani secara khusus melalui SSL.security.W006: Pengaturan
SECURE_CONTENT_TYPE_NOSNIFFanda tidak disetel menjadiTrue, 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_FILTERsetting is not set toTrue, 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 theX-XSS-Protectionheader is no longer honored by modern browsers.security.W008: Pengaturan
SECURE_SSL_REDIRECTanda tidak disetel menjadiTrue. Meskipun situs anda harus tersedia terhadap kedua hubungan SSL dan bukan-SSL, anda mungkin ingin antara menyetel pengaturan ini menjadiTrueatau konfigurasi sebuah penyeimbang muatan atau peladen membalikkan-proxy ke mengalihkan semua hubungan pada HTTPS.security.W009: Your
SECRET_KEYhas 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 value, otherwise many of Django's security-critical features will be vulnerable to attack.security.W010: Anda memiliki
django.contrib.sessionsdiINSTALLED_APPSanda tetapi anda belum menyetelSESSION_COOKIE_SECUREmenjadiTrue. 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.SessionMiddlewaredalamMIDDLEWAREanda, tetapi anda belum menyetelSESSION_COOKIE_SECUREmenjadiTrue. Menggunakan sesi kue hanya-aman membuatnya lebih sulit untuk pencium lalu lintas jaringan membajak sesi pengguna.security.W012:
SESSION_COOKIE_SECUREtidak disetel menjadiTrue. Menggunakan kue sesi hanya-aman membuatnya lebih sulit untuk lalu lintas jaringan sapu tangan untuk membajak sesi pengguna.security.W013: Anda memiliki
django.contrib.sessionsdiINSTALLED_APPSanda, tetapi anda belum menyetelSESSION_COOKIE_HTTPONLYmenjadiTrue. Menggunakan kue sesiHttpOnlymembuatnya lebih sulit untuk serangan penulisan lintas-situs untuk membajak sesi pengguna.security.W014: Anda memiliki
django.contrib.sessions.middleware.SessionMiddlewaredalamMIDDLEWAREanda, tetapi anda belum menyetelSESSION_COOKIE_HTTPONLYmenjadiTrue. Menggunakan sebuah sesi kueHttpOnlymembuatnya itu lebih sulit untuk serangan cross-site scripting untuk membajaksesi pengguna.security.W015:
SESSION_COOKIE_HTTPONLYtidak disetel menjadiTrue. Menggunakan kue sesiHttpOnlymembuatnya lebih sulit untuk serangan penulisan lintas-situs untuk membajak sesi pengguna.security.W016:
CSRF_COOKIE_SECUREtidak disetel menjadiTrue. Menggunakan kue CSRF hanya-aman membuatnya lebih sulit untuk lalu lintas jaringan sapu tangan untuk mencuri token CSRF.security.W017:
CSRF_COOKIE_HTTPONLYis not set toTrue. Using anHttpOnlyCSRF cookie makes it more difficult for cross-site scripting attacks to steal the CSRF token. This check is removed in Django 1.11 as theCSRF_COOKIE_HTTPONLYsetting offers no practical benefit.security.W018*: Anda harus mempunyai
DEBUGdisetel keTruedalam menyebarkan.security.W019: You have
django.middleware.clickjacking.XFrameOptionsMiddlewarein yourMIDDLEWARE, butX_FRAME_OPTIONSis 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_HOSTSharus tidak kosong dalam menyebarkan.security.W021: Anda belum menyetel pengaturan
SECURE_HSTS_PRELOADmenjadiTrue. Tanpa ini, situs anda tidak dapat diajukan ke daftar pramuat peramban.security.W022: You have not set the
SECURE_REFERRER_POLICYsetting. 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_POLICYmenjadi nilai tidak sah.security.E024: You have set the
SECURE_CROSS_ORIGIN_OPENER_POLICYsetting to an invalid value.security.W025: Your
SECRET_KEY_FALLBACKS[n]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 value, otherwise many of Django's security-critical features will be vulnerable to attack.
The following checks verify that your security-related settings are correctly configured:
security.E100:
DEFAULT_HASHING_ALGORITHMmust 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 anda dengan benar dikonfigurasi:
templates.E001: You have
'APP_DIRS': Truein yourTEMPLATESbut also specify'loaders'inOPTIONS. Either removeAPP_DIRSor remove the'loaders'option. This check is removed in Django 5.1 as system checks may now raiseImproperlyConfiguredinstead.templates.E002:
string_if_invaliddi setting:TEMPLATESOPTIONSharus berupa string tetapi mendapatkan:{value}({type}).templates.E003:
<name>is used for multiple template tag modules:<module list>. This check was changed totemplates.W003in Django 4.1.2.templates.W003:
<name>is used for multiple template tag modules:<module list>.
Terjemahan¶
Pemeriksaan berikut dilakukan pada konfigurasi terjemahan anda:
translation.E001: Anda telah menyediakan nilai tidak sah untuk pengaturan
LANGUAGE_CODE:<value>.translation.E002: Anda telah menyediakan kode bahasa tidak sah dalam
LANGUAGESsetting:<value>.translation.E003: Anda telah menyediakan kode bahasa tidak sah dalam pengaturan
LANGUAGES_BIDI:<value>.translation.E004: Anda telah menyediakan sebuah nilai untuk pengaturan
LANGUAGE_CODEyang tidak di dalam pengaturanLANGUAGES.
URL¶
Pemeriksaan berikut dilakukan di konfigurasi URL anda:
urls.W001: Pola URL anda
<pattern>menggunakaninclude()denganrouteakhiran$. Memindahkan dolar darirouteuntuk menghindari masalah termasuk URL.urls.W002: Pola URL anda
<pattern>mempunyairoutedimulai dengan sebuah/. Pindahkan garis miring ini ketika itu tidak dibutuhkan. Jika pola ini disasarkan dalam sebuahinclude(), pastikan polainclude()mempunyai buntutan/.urls.W003: Corak
<pattern>URL mempunyainametermasuk sebuah:. Pindahkan titik dua, untuk menghindari dua arti acuan namespace.urls.E004: Pola URL anda
<pattern>tidak sah. Pastikan bahwaurlpatternsadalah daftar daripath()dan/atau contohre_path().urls.W005: namespace URL
1tidak unik. Anda mungkin tidak dapat membalikkan semua URL dalam namespace ini.urls.E006: pengaturan
MEDIA_URL/STATIC_URLharus berakhir dengan sebuah garis miring.urls.E007: Tampilan
handlerXXXpenyesuaian'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>.urls.W010: Your URL pattern
<pattern>has an unmatched<angle bracket>.
Pemeriksaan aplikasi contrib¶
admin¶
Admin memeriksa semua yang dilakukan sebagai bagian dari etiket admin.
Pemeriksaan berikut dilakukan pada setiap ModelAdmin (atau subkelas) yang terdaftar dengan situs admin:
admin.E001: Nilai dari
raw_id_fieldsharus 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
fieldsharus berupa daftar atau tuple.admin.E005: kedua
fieldsetsdanfieldsditentukan.admin.E006: Nilai dari
fieldsmengandung bidang ganda.admin.E007: Nilai dari
fieldsetsharus 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 kuncifields.admin.E012: Ada bidang ganda dalam
fieldsets[n][1].admin.E013: The value of
fields[n]/filter_horizontal[n]/filter_vertical[n]/fieldsets[n][m]cannot include theManyToManyField<field name>, because that field manually specifies a relationship model.admin.E014: Nilai dari
excludeharus berupa daftar atau tuple.admin.E015: Nilai dari
excludemengandung bidang ganda.admin.E016: Nilai dari
formharus warisan dariBaseModelForm.admin.E017: Nilai dari
filter_verticalharus berupa daftar atau tuple.admin.E018: Nilai-nilai dari
filter_horizontalharus 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_fieldsharus berupa kamus.admin.E022: The value of
radio_fieldsrefers to<field name>, which is not a field of<model>.admin.E023: The value of
radio_fieldsrefers to<field name>, which is not an instance ofForeignKey, and does not have achoicesdefinition.admin.E024: Nilai dari
radio_fields[<field name>]harus berupaadmin.HORIZONTALatauadmin.VERTICAL.admin.E025: Nilai dari
view_on_siteharus berupa callable atau nilai boolean.admin.E026: Nilai dari
prepopulated_fieldsharus berupa kamus.admin.E027: The value of
prepopulated_fieldsrefers to<field name>, which is not a field of<model>.admin.E028: Nilai dari
prepopulated_fieldsmengacu pada<field name>, yang harus tidak berupa sebuah bidangDateTimeField,ForeignKey,OneToOneField, atauManyToManyField.admin.E029: Nilai dari
prepopulated_fields[<field name>]harus berupa daftar atau tuple.admin.E030: The value of
prepopulated_fieldsrefers to<field name>, which is not a field of<model>.admin.E031: Nilai dari
orderingharus berupa daftar atau tuple.admin.E032: Nilai dari
orderingmempunyai pembuat urutan acak?, tetapi mengandung bidang lain juga.admin.E033: The value of
orderingrefers to<field name>, which is not a field of<model>.admin.E034: Nilai dari
readonly_fieldsharus berupa sebuah daftar atau tuple.admin.E035: The value of
readonly_fields[n]refers to<field_name>, which is not a callable, an attribute of<ModelAdmin class>, or an attribute of<model>.admin.E036: Nilai dari
autocomplete_fieldsharus 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 menentukansearch_fields, karena itu diacukan oleh``<other_modeladmin>.autocomplete_fields``.
ModelAdmin¶
Pemeriksaan berikut dilakukan di setiap ModelAdmin yang terdaftar dengan situs admin:
admin.E101: Nilai dari
save_asharus boolean.admin.E102: Nilai dari
save_on_topharus boolean.admin.E103: Nilai dari
inlinesharus berupa sebuahd daftar atau tuple.admin.E104:
<InlineModelAdmin class>harus mewarisi dariInlineModelAdmin.admin.E105:
<InlineModelAdmin class>harus mempunyai atributmodel.admin.E106: Nilai dari
<InlineModelAdmin class>.modelharus berupaModel.admin.E107: Nilai dari
list_displayharus berupa daftar atau tuple.admin.E108: The value of
list_display[n]refers to<label>, which is not a callable or attribute of<ModelAdmin class>, or an attribute, method, or field on<model>.admin.E109: The value of
list_display[n]must not be a many-to-many field or a reverse foreign key.admin.E110: Nilai dari
list_display_linksharus berupa daftar, tuple atauNone.admin.E111: Nilai dari
list_display_links[n]mengacu pada<label>, yang tidak ditentukan dilist_display.admin.E112: Nilai dari
list_filterharus berupa daftar atau tuple.admin.E113: Nilai dari
list_filter[n]harus warisan dariListFilter.admin.E114: Nilai dari
list_filter[n]harus bukan warisan dariFieldListFilter.admin.E115: Nilai dari
list_filter[n][1]harus warisan dariFieldListFilter.admin.E116: Nilai dari
list_filter[n]mengacu pada<label>, yang bukan mengacu pada sebuah Bidang.admin.E117: Nilai dari
list_select_relatedharus berupa boolean, tuple atau daftar.admin.E118: Nilai dari
list_per_pageharus berupa integer.admin.E119: Nilai dari
list_max_show_allharus berupa integer.admin.E120: Nilai dari
list_editableharus 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 dilist_display.admin.E123: Nilai dari
list_editable[n]tidak dapat di kedualist_editabledanlist_display_links.admin.E124: Nilai dari
list_editable[n]mengacu pada bidang pertama dilist_display(<label>), yang tidak dapat digunakan meskipunlist_display_linksdisetel.admin.E125: Nilai dari
list_editable[n]mengacu pada<field name>, yang tidak dapat disunting melalui admin.admin.E126: Nilai dari
search_fieldsharus berupa sebuah daftar atau tuple.admin.E127: Nilai dari
date_hierarchymengacu pada<field name>, yang tidak mengacu ke sebuah Bidang.admin.E128: Nilai dari
date_hierarchyharus berupaDateFieldatauDateTimeField.admin.E129:
<modeladmin>harus menentukan metodehas_<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 yang didaftarkan sebagai sebaris pada ModelAdmin.
admin.E201: Tidak dapat mengeluarkan bidang
<field name>, karena itu adalah foreign key pada model induk<app_label>.<model>.admin.E202:
<model>has noForeignKeyto<parent model>./<model>has more than oneForeignKeyto<parent model>. You must specify afk_nameattribute.admin.E203: Nilai dari
extraharus berupa integer.admin.E204: Nilai
max_numharus berupa integer.admin.E205: Nilai
min_numharus berupa integer.admin.E206: Nilai dari
formsetharus warisan dariBaseModelFormSet.
GenericInlineModelAdmin¶
Pemeriksaan berikut dilakukan pada setiap GenericInlineModelAdmin yang didaftarkan sebagai berderet pada 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 mempunyaiGenericForeignKey.admin.E304:
<model>tidak mempunyaiGenericForeignKeymenggunakan<field name>bidang jenis isi dan<field name>bidang ID obyek.
AdminSite¶
Pemeriksaan berikut dilakukan pada awalan AdminSite:
admin.E401:
django.contrib.contenttypesharus diINSTALLED_APPSuntuk menggunakan aplikasi admin.admin.E402:
django.contrib.auth.context_processors.authharus diadakan dalamDjangoTemplates(TEMPLATES) jika menggunakan autentifikasi backend awalan untuk menggunakan aplikasi admin.admin.E403: Sebuah contoh
django.template.backends.django.DjangoTemplatesharus dikonfigurasi dalamTEMPLATESuntuk menggunakan aplikasi admin.admin.E404:
django.contrib.messages.context_processors.messagesharus diadakan dalamDjangoTemplates(TEMPLATES) untuk menggunakan aplikasi admin.admin.E405:
django.contrib.authharus berada dalamINSTALLED_APPSuntuk menggunakan aplikasi admin.admin.E406:
django.contrib.messagesharus berada dalamINSTALLED_APPSutnuk menggunakan aplikasi admin.admin.E408:
django.contrib.auth.middleware.AuthenticationMiddlewareharus berada dalamMIDDLEWAREuntuk menggunakan aplikasi admin.admin.E409:
django.contrib.messages.middleware.MessageMiddlewareharus berada dalamMIDDLEWAREuntuk menggunakan aplikasi admin.admin.E410:
django.contrib.sessions.middleware.SessionMiddlewareharus berada dalamMIDDLEWAREuntuk menggunakan aplikasi admin.admin.W411:
django.template.context_processors.requestmust be enabled inDjangoTemplates(TEMPLATES) in order to use the admin navigation sidebar.
auth¶
auth.E001:
REQUIRED_FIELDSharus berupa daftar atau rekaman.auth.E002: Bidang bernama sebagai
USERNAME_FIELDuntuk model pengguna penyesuaian harus tidak disertakan diREQUIRED_FIELDS.auth.E003:
<field>harus unik karena itu dinamai sebagaiUSERNAME_FIELD.auth.W004:
<field>dinamai sebagaiUSERNAME_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_namedari 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_anonymousharus 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_authenticatedharus 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.auth.E013: In order to use
django.contrib.auth.middleware.LoginRequiredMiddleware,django.contrib.auth.middleware.AuthenticationMiddlewaremust be defined before it in MIDDLEWARE.
contenttypes¶
Pemeriksaan berikut dilakukan ketika sebuah model mengandung sebuah GenericForeignKey atau GenericRelation:
contenttypes.E001: ID obyek
GenericForeignKeymengacu bidang tidak ada<field>.contenttypes.E002: Jenis isi
GenericForeignKeymengacu field<field>yang tidak ada.contenttypes.E003:
<field>bukanForeignKey.contenttypes.E004:
<field>bukanForeignKeypadacontenttypes.ContentType.contenttypes.E005: Nama-nama model harus paling banyak 100 karakter.
postgres¶
Pemeriksaan berikut dilakukan pada bidang model 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 tofields.E010in Django 3.1.postgres.W004: Base field for array has warnings: ...
sites¶
Pemeriksaan berikut dilakukan pada setiap model menggunakan CurrentSiteManager:
sites.E001:
CurrentSiteManagertidak dapat menemukan sebuah bidang dinamai<field name>.sites.E002:
CurrentSiteManagertidak dapat menggunakan<field>karena itu adalah bukan foreign key atau bidang many-to-many.
The following checks verify that django.contrib.sites is correctly
configured:
sites.E101: The
SITE_IDsetting must be an integer.
staticfiles¶
Pemeriksaan berikut mensahkan bahwa django.contrib.staticfiles dikonfigurasi dengan benar.
staticfiles.E001: Pengaturan
STATICFILES_DIRSbukan tuple atau list.staticfiles.E002: Pengaturan
STATICFILES_DIRSharus tidak mengandung pengaturan :setting:`STATIC_ROOT.staticfiles.E003: Awalan
<prefix>dalam pengaturanSTATICFILES_DIRStidak boleh diakhiri dengan sebuah garis miring.staticfiles.W004: The directory
<directory>in theSTATICFILES_DIRSdoes not exist.staticfiles.E005: The
STORAGESsetting must define astaticfilesstorage.