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:
level
Kesederhanaan 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.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
, dimanaX
adalah satu dari hurufCEWID
, 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.
Memeriksa sistem inti¶
Dukungan asinkronus¶
Pemeriksanaan berikut mengecek setelan anda untuk Dukungan asinkronus:
async.E001: You should not set the
DJANGO_ALLOW_ASYNC_UNSAFE
environment 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 sebuahroute
yang 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_ORIGINS
harus 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 karenaLOCATION
matches/is inside/containsMEDIA_ROOT
/STATIC_ROOT
/STATICFILES_DIRS
.caches.W003:
<cache>
cacheLOCATION
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 tidak mengizinkan
CharField
unik memilikimax_length
> 255. Pemeriksaan ini berubah padamysql.W003
di 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
CharField
untuk memilikimax_length
> 255.
Mengelola berkas¶
Pemeriksaan berikut memeriksa setelan anda untuk for Mengelola berkas:
files.E001: Pengaturan
FILE_UPLOAD_TEMP_DIR
mengacu 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:
pk
adalah kata terpesan yang tidak dapat digunakan sebagai nama bidang.fields.E004:
choices
must be a mapping (e.g. a dictionary) or an iterable (e.g. a list or tuple).fields.E005:
choices
must be a mapping of actual values to human readable names or an iterable containing(actual value, human readable name)
tuples.fields.E006:
db_index
harus berupaNone
,True
atauFalse
.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 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.E013:
CompositePrimaryKey
must be namedpk
.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 atributmax_length
.fields.E121:
max_length
harus integer positif.fields.W122:
max_length
diabaikan ketika digunakan dengan<integer field type>
.fields.E130:
DecimalField
harus ditentukan atributdecimal_places
.fields.E131:
decimal_places
harus berupa integer bukan-negatif.fields.E132:
DecimalField
harus ditentukan atributmax_digits
.fields.E133:
max_digits
harus berupa integer positif.fields.E134:
max_digits
harus lebih besar atau sama dengandecimal_places
.fields.E140:
FilePathField
harus mempunyai salah satuallow_files
atauallow_folders
disetel ke True.fields.E150:
GenericIPAddressField
tidak boleh memilikiblank=True
jikanull=False
, sebagai nilai kosong disimpan sebagai null.fields.E160: Pilihan
auto_now
,auto_now_add
, dandefault
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.W163:
<database>
tidak mendukung komentatar pada kolom (db_comment
).fields.E170:
default
BinaryField
’tidak boleh string. Gunakan isian byte.fields.E180:
<database>
tidak mendukungJSONField
s.fields.E190:
<database>
tidak mendukung pengumpulan basis data pada<field_type>
s.fields.E220:
<database>
does not supportGeneratedField
s.fields.E221:
<database>
does not support non-persistedGeneratedField
s.fields.E222:
<database>
does not support persistedGeneratedField
s.fields.E223:
GeneratedField.output_field
has errors: ...fields.W224:
GeneratedField.output_field
has warnings: ...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
diusangkan dan akan dipindahkan di Django 3.1. Pemeriksaan ini muncul di Django 2.2 dan 3.0.fields.W903:
NullBooleanField
diusangkan. 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:
NullBooleanField
dipindahkan kecuali untuk mendukung dalam perpindahan riwayat.fields.W904:
django.contrib.postgres.fields.JSONField
diusangkan. 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.JSONField
dipindahkan kecuali untuk dukungan dalam perpindahan riwayat.fields.W905:
django.contrib.postgres.fields.CICharField
is 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.CICharField
is removed except for support in historical migrations.fields.W906:
django.contrib.postgres.fields.CIEmailField
is 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.CIEmailField
is removed except for support in historical migrations.fields.W907:
django.contrib.postgres.fields.CITextField
is 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.CITextField
is removed except for support for historical migrations.
Bidang-bidang berkas¶
fields.E200:
unique
bukan argumen sah untukFileField
. Pemeriksaan ini dipindahkan dalam Django 1.11.fields.E201:
primary_key
bukan argumen sah untukFileField
.fields.E202: Argumen
upload_to
``FileField``harus berupa jalur bergantung, bukan jalur mutlak.fields.E210: Tidak dapat menggunakan
ImageField
karena 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:
id
dapat 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_together
must be a list or tuple. This check appeared before Django 5.1.models.E009: All
index_together
elements must be lists or tuples. This check appeared before Django 5.1.models.E010:
unique_together
harus berupa daftar atau tuple.models.E011: Semua unsur
unique_together
harus berupa daftar atau tuple.models.E012:
constraints/indexes/unique_together
refers to the nonexistent field<field name>
.models.E013:
constraints/indexes/unique_together
refers to aManyToManyField
<field name>
, butManyToManyField
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
mengacu pada bidang tidak ada, bidang terkait, atau pencarian<field name>
.models.E016:
constraints/indexes/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
danorder_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: 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:
constraints
refers to the joined field<field name>
.models.E042:
<field name>
cannot be included in the composite primary key.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.models.E048:
constraints/indexes/unique_together
refers to aCompositePrimaryKey
<field name>
, butCompositePrimaryKey
s are not supported for that option.
Pengelolaan perintah¶
The following checks verify custom management commands are correctly configured:
commands.E001: The
migrate
andmakemigrations
commands must have the sameautodetector
.
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.SecurityMiddleware
in yourMIDDLEWARE
so theSECURE_HSTS_SECONDS
,SECURE_CONTENT_TYPE_NOSNIFF
,SECURE_REFERRER_POLICY
,SECURE_CROSS_ORIGIN_OPENER_POLICY
, andSECURE_SSL_REDIRECT
settings will have no effect.security.W002: Anda tidak mempunyai
django.middleware.clickjacking.XFrameOptionsMiddleware
dalamMIDDLEWARE
, 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
tidak dalam pengaturanMIDDLEWARE
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
. 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_SUBDOMAINS
menjadiTrue
. Tanpa ini, situs anda berpotensi rentan pada serangan melalui hubungan tidak aman ke subranah. Hanya setel ini menjadiTrue
jika anda yakin bajwa semua subranah dari ranah anda harus dilayani secara khusus melalui SSL.security.W006: Pengaturan
SECURE_CONTENT_TYPE_NOSNIFF
anda 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_FILTER
setting 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-Protection
header is no longer honored by modern browsers.security.W008: Pengaturan
SECURE_SSL_REDIRECT
anda tidak disetel menjadiTrue
. Meskipun situs anda harus tersedia terhadap kedua hubungan SSL dan bukan-SSL, anda mungkin ingin antara menyetel pengaturan ini menjadiTrue
atau konfigurasi sebuah penyeimbang muatan atau peladen membalikkan-proxy ke mengalihkan semua hubungan pada HTTPS.security.W009: Your
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 value, otherwise many of Django's security-critical features will be vulnerable to attack.security.W010: Anda memiliki
django.contrib.sessions
diINSTALLED_APPS
anda tetapi anda belum menyetelSESSION_COOKIE_SECURE
menjadiTrue
. 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
dalamMIDDLEWARE
anda, tetapi anda belum menyetelSESSION_COOKIE_SECURE
menjadiTrue
. Menggunakan sesi kue hanya-aman membuatnya lebih sulit untuk pencium lalu lintas jaringan membajak sesi pengguna.security.W012:
SESSION_COOKIE_SECURE
tidak 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.sessions
diINSTALLED_APPS
anda, tetapi anda belum menyetelSESSION_COOKIE_HTTPONLY
menjadiTrue
. Menggunakan kue sesiHttpOnly
membuatnya lebih sulit untuk serangan penulisan lintas-situs untuk membajak sesi pengguna.security.W014: Anda memiliki
django.contrib.sessions.middleware.SessionMiddleware
dalamMIDDLEWARE
anda, tetapi anda belum menyetelSESSION_COOKIE_HTTPONLY
menjadiTrue
. Menggunakan sebuah sesi kueHttpOnly
membuatnya itu lebih sulit untuk serangan cross-site scripting untuk membajaksesi pengguna.security.W015:
SESSION_COOKIE_HTTPONLY
tidak disetel menjadiTrue
. Menggunakan kue sesiHttpOnly
membuatnya lebih sulit untuk serangan penulisan lintas-situs untuk membajak sesi pengguna.security.W016:
CSRF_COOKIE_SECURE
tidak disetel menjadiTrue
. Menggunakan kue CSRF hanya-aman membuatnya lebih sulit untuk lalu lintas jaringan sapu tangan untuk mencuri token CSRF.security.W017:
CSRF_COOKIE_HTTPONLY
is not set toTrue
. Using anHttpOnly
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 theCSRF_COOKIE_HTTPONLY
setting offers no practical benefit.security.W018*: Anda harus mempunyai
DEBUG
disetel keTrue
dalam menyebarkan.security.W019: You have
django.middleware.clickjacking.XFrameOptionsMiddleware
in yourMIDDLEWARE
, butX_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
harus tidak kosong dalam menyebarkan.security.W021: Anda belum menyetel pengaturan
SECURE_HSTS_PRELOAD
menjadiTrue
. Tanpa ini, situs anda tidak dapat diajukan ke daftar pramuat peramban.security.W022: You have not set the
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
menjadi nilai tidak sah.security.E024: You have set the
SECURE_CROSS_ORIGIN_OPENER_POLICY
setting 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_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
anda dengan benar dikonfigurasi:
templates.E001: You have
'APP_DIRS': True
in yourTEMPLATES
but also specify'loaders'
inOPTIONS
. Either removeAPP_DIRS
or remove the'loaders'
option. This check is removed in Django 5.1 as system checks may now raiseImproperlyConfigured
instead.templates.E002:
string_if_invalid
di setting:TEMPLATESOPTIONS
harus berupa string tetapi mendapatkan:{value}
({type}
).templates.E003:
<name>
is used for multiple template tag modules:<module list>
. This check was changed totemplates.W003
in 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
LANGUAGES
setting:<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_CODE
yang tidak di dalam pengaturanLANGUAGES
.
URL¶
Pemeriksaan berikut dilakukan di konfigurasi URL anda:
urls.W001: Pola URL anda
<pattern>
menggunakaninclude()
denganroute
akhiran$
. Memindahkan dolar dariroute
untuk menghindari masalah termasuk URL.urls.W002: Pola URL anda
<pattern>
mempunyairoute
dimulai 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 mempunyainame
termasuk sebuah:
. Pindahkan titik dua, untuk menghindari dua arti acuan namespace.urls.E004: Pola URL anda
<pattern>
tidak sah. Pastikan bahwaurlpatterns
adalah daftar daripath()
dan/atau contohre_path()
.urls.W005: namespace URL
1
tidak unik. Anda mungkin tidak dapat membalikkan semua URL dalam namespace ini.urls.E006: pengaturan
MEDIA_URL
/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>
.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_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
danfields
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 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
exclude
harus berupa daftar atau tuple.admin.E015: Nilai dari
exclude
mengandung bidang ganda.admin.E016: Nilai dari
form
harus warisan dariBaseModelForm
.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 ofForeignKey
, and does not have achoices
definition.admin.E024: Nilai dari
radio_fields[<field name>]
harus berupaadmin.HORIZONTAL
atauadmin.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 bidangDateTimeField
,ForeignKey
,OneToOneField
, atauManyToManyField
.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: 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_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 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_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 dariInlineModelAdmin
.admin.E105:
<InlineModelAdmin class>
harus mempunyai atributmodel
.admin.E106: Nilai dari
<InlineModelAdmin class>.model
harus berupaModel
.admin.E107: Nilai dari
list_display
harus 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_links
harus 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_filter
harus 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_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 dilist_display
.admin.E123: Nilai dari
list_editable[n]
tidak dapat di kedualist_editable
danlist_display_links
.admin.E124: Nilai dari
list_editable[n]
mengacu pada bidang pertama dilist_display
(<label>
), yang tidak dapat digunakan meskipunlist_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 berupaDateField
atauDateTimeField
.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 noForeignKey
to<parent model>
./<model>
has more than oneForeignKey
to<parent model>
. You must specify afk_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 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 mempunyaiGenericForeignKey
menggunakan<field name>
bidang jenis isi dan<field name>
bidang ID obyek.
AdminSite
¶
Pemeriksaan berikut dilakukan pada awalan AdminSite
:
admin.E401:
django.contrib.contenttypes
harus diINSTALLED_APPS
untuk menggunakan aplikasi admin.admin.E402:
django.contrib.auth.context_processors.auth
harus diadakan dalamDjangoTemplates
(TEMPLATES
) jika menggunakan autentifikasi backend awalan untuk menggunakan aplikasi admin.admin.E403: Sebuah contoh
django.template.backends.django.DjangoTemplates
harus dikonfigurasi dalamTEMPLATES
untuk menggunakan aplikasi admin.admin.E404:
django.contrib.messages.context_processors.messages
harus diadakan dalamDjangoTemplates
(TEMPLATES
) untuk menggunakan aplikasi admin.admin.E405:
django.contrib.auth
harus berada dalamINSTALLED_APPS
untuk menggunakan aplikasi admin.admin.E406:
django.contrib.messages
harus berada dalamINSTALLED_APPS
utnuk menggunakan aplikasi admin.admin.E408:
django.contrib.auth.middleware.AuthenticationMiddleware
harus berada dalamMIDDLEWARE
untuk menggunakan aplikasi admin.admin.E409:
django.contrib.messages.middleware.MessageMiddleware
harus berada dalamMIDDLEWARE
untuk menggunakan aplikasi admin.admin.E410:
django.contrib.sessions.middleware.SessionMiddleware
harus berada dalamMIDDLEWARE
untuk menggunakan aplikasi admin.admin.W411:
django.template.context_processors.request
must be enabled inDjangoTemplates
(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 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_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.auth.E013: In order to use
django.contrib.auth.middleware.LoginRequiredMiddleware
,django.contrib.auth.middleware.AuthenticationMiddleware
must be defined before it in MIDDLEWARE.
contenttypes
¶
Pemeriksaan berikut dilakukan ketika sebuah model mengandung sebuah GenericForeignKey
atau 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>
bukanForeignKey
.contenttypes.E004:
<field>
bukanForeignKey
padacontenttypes.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.E010
in Django 3.1.postgres.W004: Base field for array has warnings: ...
sites
¶
Pemeriksaan berikut dilakukan pada setiap model menggunakan 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
is correctly
configured:
sites.E101: The
SITE_ID
setting must be an integer.
staticfiles
¶
Pemeriksaan berikut mensahkan bahwa django.contrib.staticfiles
dikonfigurasi dengan benar.
staticfiles.E001: Pengaturan
STATICFILES_DIRS
bukan tuple atau list.staticfiles.E002: Pengaturan
STATICFILES_DIRS
harus tidak mengandung pengaturan :setting:`STATIC_ROOT.staticfiles.E003: Awalan
<prefix>
dalam pengaturanSTATICFILES_DIRS
tidak boleh diakhiri dengan sebuah garis miring.staticfiles.W004: The directory
<directory>
in theSTATICFILES_DIRS
does not exist.staticfiles.E005: The
STORAGES
setting must define astaticfiles
storage.