{"title":"Filosofi rancangan","version":"6.1","locale":"id","docname":"misc/design-philosophies","url":"/id/6.1/misc/design-philosophies/","canonical":"https://djangodocs.dev/id/6.1/misc/design-philosophies/","summary":"Dokumen ini menjelaskan beberapa dari filosofi dasar pengembang Django yang telah digunakan dalam membuat kerangka. Tujuannya adalah menjelaskan yang lampau dan…","html":"<h1>Filosofi rancangan<a class=\"heading-anchor\" href=\"#design-philosophies\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Dokumen ini menjelaskan beberapa dari filosofi dasar pengembang Django yang telah digunakan dalam membuat kerangka. Tujuannya adalah menjelaskan yang lampau dan memandu masa akan datang.</p>\n<section id=\"overall\">\n<h2>Keseluruhan<a class=\"heading-anchor\" href=\"#overall\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"loose-coupling\">\n<span id=\"id1\"></span><h3>Kehilangan sambungan<a class=\"heading-anchor\" href=\"#loose-coupling\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p id=\"index-0\">Sasaran dasar tumpukan Django adalah <a class=\"reference external\" href=\"https://wiki.c2.com/?CouplingAndCohesion\">loose coupling and tight cohesion</a>. Bermacam lapisan dari kerangka jangan &quot;mengetahui&quot; tentang satu sama lain meskipun sangat butuh.</p>\n<p>Sebagai contoh, sistem cetakan tidak mengetahui tentang permintaan jaringan, lapisan basisdata tidak mengetahui tentang data ditampilkan dan sistem tampilan tidak peduli sistem cetakan mana yang digunakan seorang pemrogram.</p>\n<p>Meskipun Django datang dengan tumpukan penuh keyakinan, potongan dari tumpukan adalah berdiri sendiri dari lainnya sedapat mungkin.</p>\n</section>\n<section id=\"less-code\">\n<span id=\"id2\"></span><h3>Kode sedikit<a class=\"heading-anchor\" href=\"#less-code\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Aplikasi Django harus menggunakan sedikit kode sebisa mungkin; mereka kekurangan boilerplate. Django harus mengambil keuntungan penuh dari kemampuan dinamis Phyton, seperti interospeksi.</p>\n</section>\n<section id=\"quick-development\">\n<span id=\"id3\"></span><h3>Pengembangan cepat<a class=\"heading-anchor\" href=\"#quick-development\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Titik dari kerangka kerja jaringan dalam abad 21 adalah membuat aspek membosankan dari pengembangan jaringan cepat. Django harus mengizinkan pengembangan jaringan cepat yang luar biasa.</p>\n</section>\n<section id=\"don-t-repeat-yourself-dry\">\n<span id=\"dry\"></span><h3>Jangan Ulangi Diri anda (JUDA)<a class=\"heading-anchor\" href=\"#don-t-repeat-yourself-dry\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p id=\"index-1\">Setiap konsep berbeda dan/atau potongan data harus berada dalam satu, dan hanya satu, tempat. Pengulangan adalah buruk. Normalisasi adalah bagus.</p>\n<p>Kerangka, dalam alasan, harus menyimpulkan sebanyak mungkin dari sekecil mungkin.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Lihat juga</p>\n<p><a class=\"reference external\" href=\"https://wiki.c2.com/?DontRepeatYourself\">obrolan DRY di Portland Pattern Repository</a></p>\n</aside>\n</section>\n<section id=\"explicit-is-better-than-implicit\">\n<span id=\"id5\"></span><h3>Eksplisit lebih baik dari pada implisit<a class=\"heading-anchor\" href=\"#explicit-is-better-than-implicit\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ini adalah prinsip inti Phyton terdaftar di <span class=\"target\" id=\"index-6\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0020/\"><strong>PEP 20</strong></a>, dan itu berarti Django tidak harus melakukan banyak &quot;magic.&quot; Magic jangan terjadi meskipun terdapat alasan sangat bagus. magic adalah berharga menggunakan jika dia membuat kenyamanan besar tidak terjangkau di jalan lain, dan dia tidak diterapkan di jalan yang membingungkan pengembang yang mencoba mempelajari bagaimana menggunakan fitur.</p>\n</section>\n<section id=\"consistency\">\n<span id=\"id6\"></span><h3>Konsistensi<a class=\"heading-anchor\" href=\"#consistency\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Kerangka harus konsisten pada semua tingkatan. Konsistensi berlaku ke semua dari tingkatan-rendah (menggunakan gaya pengkodean Phyton) sampai tingkatan-tinggi (&quot;pengalaman&quot; menggunakan Django).</p>\n</section>\n</section>\n<section id=\"models\">\n<h2>Model<a class=\"heading-anchor\" href=\"#models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"id7\">\n<h3>Eksplisit lebih baik dari pada implisit<a class=\"heading-anchor\" href=\"#id7\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Bidang jangan dianggap kebiasaan tertentu berdasarkan hanya pada nama bidang. Ini membutuhkan terlalu banyak pengetahuan dari sistem dan cenderung menjadi kesalahan. Malahan, kebiasaan harus berdasarkan pada argumen kata kunci dan, di beberapa kasus, pada jenis bidang.</p>\n</section>\n<section id=\"include-all-relevant-domain-logic\">\n<h3>Sertakan semua ranah logika yang terhubung<a class=\"heading-anchor\" href=\"#include-all-relevant-domain-logic\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Model harus merangkum setiap aspek dari sebuah &quot;obyek,&quot; mengikuti pola rancangan <a class=\"reference external\" href=\"https://www.martinfowler.com/eaaCatalog/activeRecord.html\">Active Record</a> Fowler.</p>\n<p>Ini mengapa kedua data dibawakan oleh model dan informasi mengenai dia (dia nama yang dapat dibaca manusia, pilihan seperti pengurutan awal, dll.) ditentukan di kelas model; semua informasi yang dibutuhkan untuk memahami model yang diberikan harus disimpan <em>di dalam</em> model.</p>\n</section>\n</section>\n<section id=\"database-api\">\n<h2>API Basisdata<a class=\"heading-anchor\" href=\"#database-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Sasaran inti dari API basisdata adalah:</p>\n<section id=\"sql-efficiency\">\n<h3>Efesiensi SQL<a class=\"heading-anchor\" href=\"#sql-efficiency\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Dia harus menjalankan pernyataan SQL sedikit waktu mungkin, dan dia harus mengoptimalkan pernyataan secara internal.</p>\n<p>Ini adalah mengapa pengembang butuh memanggil <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> secara eksplisit, dari pada kerangka menyimpan hal-hal dibelakang layar secara sembunyi.</p>\n<p>This is also why the <code class=\"docutils literal notranslate\"><span class=\"pre\">FETCH_PEERS</span></code> <a class=\"reference internal\" href=\"/id/6.1/topics/db/fetch-modes/\"><span class=\"doc\">fetch mode</span></a>\nexists. It's an optional performance booster for the common case of selecting\nrelated objects for every peer in a <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>.</p>\n</section>\n<section id=\"terse-powerful-syntax\">\n<h3>Terse, sintaks kuat<a class=\"heading-anchor\" href=\"#terse-powerful-syntax\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>API basisdata harus mengijinkan kaya, pernyataan ungkapan sebagai sintaks kecil sebisa mungkin. Itu harus tidak bergantung pada mengimpor modul lain atau obyek pembantu.</p>\n<p>Penggabungan harus dilakukan otomatis, dibelakang layar, ketika dibutuhkan.</p>\n<p>Setiap obyek harus mampu mengakses setiap obyek terhubung, sistem lebar. Akses ini harus bekerja dikedua cara.</p>\n</section>\n<section id=\"option-to-drop-into-raw-sql-easily-when-needed\">\n<h3>Pilihan menjatuhkan kedalam SQL mentah dengan mudah, ketika dibutuhkan.<a class=\"heading-anchor\" href=\"#option-to-drop-into-raw-sql-easily-when-needed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>API basisdata harus menyadari jalan pintasnya tetapi tidak perlu akhir-semua-akan-semua. Kerangka harus membuatnya mudah untuk menulis SQL penyesuaian -- seluruh pernyataan, atau hanya klausa <code class=\"docutils literal notranslate\"><span class=\"pre\">WHERE</span></code> penyesuaian sebagai parameter penyesuaian ke pemanggilan API.</p>\n</section>\n</section>\n<section id=\"url-design\">\n<h2>Rancangan URL<a class=\"heading-anchor\" href=\"#url-design\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"id8\">\n<h3>Kehilangan sambungan<a class=\"heading-anchor\" href=\"#id8\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>URL di aplikasi Django tidak boleh bergandengan ke kode Phyton pokok. Mengikat URL ke nama fungsi Phyton adalah Hal Buruk Dan Jelek.</p>\n<p>Bersama baris ini, sistem URL Django harus mengizinkan URL untuk aplikasi sama menjadi berbeda di konteks berbeda. Sebagai contoh, satu situs mungkin menaruh cerita pada <code class=\"docutils literal notranslate\"><span class=\"pre\">/stories/</span></code>, dimana lainnya mungkin menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">/news/</span></code>.</p>\n</section>\n<section id=\"infinite-flexibility\">\n<h3>Fleksibilitas tidak terbatas<a class=\"heading-anchor\" href=\"#infinite-flexibility\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>URL harus sefleksibel mungkin. Apapun rancangan URL yang dipikirkan harus diizinkan.</p>\n</section>\n<section id=\"encourage-best-practices\">\n<h3>Mendorong praktik terbaik<a class=\"heading-anchor\" href=\"#encourage-best-practices\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Kerangka harus membuatnya semudah (atau bahkan lebih mudah) untuk pengembang merancang URL cantik daripada yang jelek.</p>\n<p>Berkas ekstensi dalam URL halaman-jaringan harus dihindari.</p>\n<p>Koma gaya Vignette dalam URL pantas hukuman berat.</p>\n</section>\n<section id=\"definitive-urls\">\n<span id=\"id9\"></span><h3>URL pasti<a class=\"heading-anchor\" href=\"#definitive-urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p id=\"index-3\">Secara teknis, <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar/</span></code> adalah dua URL berbeda, dan robot mesin-pencari (dan beberapa alat analisa-lalu-lintas) akan memperlakukan mereka sebagai halaman terpisah. Django harus membuat sebuah usaha untuk &quot;menormalkan&quot; URL sehingga robot mesin-pencari itu tidak bingung.</p>\n<p>Ini adalah alasan dibelakang pengaturan <a class=\"reference internal\" href=\"/id/6.1/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APPEND_SLASH</span></code></a>.</p>\n</section>\n</section>\n<section id=\"template-system\">\n<h2>Sistem cetakan<a class=\"heading-anchor\" href=\"#template-system\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"separate-logic-from-presentation\">\n<span id=\"separation-of-logic-and-presentation\"></span><h3>Pisahkan logika dari penyajian<a class=\"heading-anchor\" href=\"#separate-logic-from-presentation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Kami melihat sistem cetakan sebagai alat yang mengendalikan penyajian dan penyajian-logika terhubung -- dan itu dia. Sistem cetakan jangan mendukung fungsi yang pergi melebihi sasaran dasar ini.</p>\n</section>\n<section id=\"discourage-redundancy\">\n<h3>Mencegah pengulangan<a class=\"heading-anchor\" href=\"#discourage-redundancy\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Kebanyakan dari situs jaringan dinamis menggunakan beberapa urutan rancangan situs lebar umum -- kepala umum, kaku, batang navigasi, dll. Sistem cetakan Django harus membuatnya mudah untuk menyimpan unsur tersebut dalam tempat tunggal, menghilangkan kode ganda.</p>\n<p>Ini adalah filosoi dibelakang <a class=\"reference internal\" href=\"/id/6.1/ref/templates/language/#template-inheritance\"><span class=\"std std-ref\">warisan cetakan</span></a>.</p>\n</section>\n<section id=\"be-decoupled-from-html\">\n<h3>Dipisahkan dari HTML<a class=\"heading-anchor\" href=\"#be-decoupled-from-html\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Sistem cetakan jangan dirancang sehingga dia hanya mengeluarkan HTML. Dia harus sama bagus pada membangkitkan bentuk berbasis-teks, atau hanya teks polos.</p>\n</section>\n<section id=\"xml-should-not-be-used-for-template-languages\">\n<h3>XML jangan digunakan untuk cetakan bahasa<a class=\"heading-anchor\" href=\"#xml-should-not-be-used-for-template-languages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p id=\"index-4\">Menggunakan mesin XML untuk mengurai cetakan memperkenalkan seluruh dunia baru dari kesalahan manusia dalam menyunting cetakan -- dan  membuat sebuah tingkatan tidak diterima dari kelebihan pengolahan cetakan.</p>\n</section>\n<section id=\"assume-designer-competence\">\n<h3>Menganggap kemampuan perancang<a class=\"heading-anchor\" href=\"#assume-designer-competence\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Sistem cetakan jangan dirancang sehingga cetakan perlu ditampilkan di penyunting WYSIWYG seperti Dreamweaver. Yang terlalu parah pembatasan dan tidak akan mengizinkan sintaks menjadi sebaik itu. Django mengharapkan cetakan penulis nyaman menyunting HTML secara langsung.</p>\n</section>\n<section id=\"treat-whitespace-obviously\">\n<h3>Perlakukan ruang kosong dengan jelas<a class=\"heading-anchor\" href=\"#treat-whitespace-obviously\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Sistem cetakan jangan melakukan hal magic dengan spasi. Jika cetakan menyertakan spasi, sistem harus memperlakukan ruang kosong seperti dia memperlakukan teks -- tampilkan dia. Spasi apapun yang bukan berada di etiket cetakan harus ditampilkan.</p>\n</section>\n<section id=\"don-t-invent-a-programming-language\">\n<h3>Jangan menciptakan sebuah bahasa pemrograman<a class=\"heading-anchor\" href=\"#don-t-invent-a-programming-language\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Sasarannya bukan untuk membuat bahasa pemrograman. Sasarannya adalah menawarkan cukup fungsi mirip-pemrograman, seperti percabangan dan perulangan, yang pada dasarnya untuk membuat keputusan penyajian-terhubung. <a class=\"reference internal\" href=\"/id/6.1/topics/templates/#template-language-intro\"><span class=\"std std-ref\">Django Template Language (DTL)</span></a> bertujuan untuk menghindari logika lanjut.</p>\n</section>\n<section id=\"safety-and-security\">\n<h3>Keselamatan dan keamanan<a class=\"heading-anchor\" href=\"#safety-and-security\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Sistem cetakan, diluar kotak, harus melarang masuknya kode berbahaya -- seperti perintah yang menghapus rekaman basisdata.</p>\n<p>Ini adalah alasan lain sistem cetakan tidak mengizinkan sewenang-wenang kode Pyton.</p>\n</section>\n<section id=\"extensibility\">\n<h3>Diperpanjang<a class=\"heading-anchor\" href=\"#extensibility\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Sistem cetakan harus mengenali penulis cetakan lanjut mungkin ingin memperpanjang teknologinya.</p>\n<p>Ini adalah filosofi dibelakang etiket cetakan penyesuaian dan saringan.</p>\n</section>\n</section>\n<section id=\"views\">\n<h2>View<a class=\"heading-anchor\" href=\"#views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"simplicity\">\n<h3>Kemudahan<a class=\"heading-anchor\" href=\"#simplicity\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Menulis tampilan harus semudah menulis fungsi Phyton. Pengembang jangan meng instantiate sebuah kelas ketika fungsi akan melakukannya.</p>\n</section>\n<section id=\"use-request-objects\">\n<h3>Gunakan obyek permintaan<a class=\"heading-anchor\" href=\"#use-request-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tampilan harus mempunyai akses untuk meminta obyek -- sebuah obyek yang menyimpan metadata tentang permintaan saat ini. Obyek harus melewati secara langsung ke fungsi tampilan, dari pada fungsi tampilan mempunyai akses permintaan data dari variabel global. Ini membuat cahaya, bersih dan mudah untuk dicoba tampilan dengan melewatkan permintaan &quot;tiruan&quot; obyek.</p>\n</section>\n<section id=\"id10\">\n<h3>Kehilangan sambungan<a class=\"heading-anchor\" href=\"#id10\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Sebuah tampilan jangan perduli tentang sistem cetakan mana pengembang gunakan -- atau bahkan apakah sistem cetakan digunakan sama sekali.</p>\n</section>\n<section id=\"differentiate-between-get-and-post\">\n<h3>Membedakan diantara GET dan POST<a class=\"heading-anchor\" href=\"#differentiate-between-get-and-post\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>GET dan POST berbeda; pengembang harus secara eksplisit menggunakan satu atau lainnya. Kerangka harus membuatnya mudah untuk membedakan diantara data GET dan POST.</p>\n</section>\n</section>\n<section id=\"cache-framework\">\n<span id=\"cache-design-philosophy\"></span><h2>Kerangka kerja Tembolok<a class=\"heading-anchor\" href=\"#cache-framework\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Sasaran inti dari <a class=\"reference internal\" href=\"/id/6.1/topics/cache/\"><span class=\"doc\">cache framework</span></a> Django adalah:</p>\n<section id=\"id11\">\n<h3>Kode sedikit<a class=\"heading-anchor\" href=\"#id11\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A cache should be as fast as possible. Hence, all framework code surrounding\nthe cache backend should be kept to the absolute minimum, especially for\n<code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code> operations.</p>\n</section>\n<section id=\"id12\">\n<h3>Konsistensi<a class=\"heading-anchor\" href=\"#id12\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>API penyimpanan harus menyediakan antarmuka tetap terhadap backend penyimpanan berbeda.</p>\n</section>\n<section id=\"id13\">\n<h3>Diperpanjang<a class=\"heading-anchor\" href=\"#id13\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>API penyimpanan harus dapat diperpanjang pada tingkatan aplikasi berdasarkan pada kebutuhan pengembang (sebagai contoh, lihat <a class=\"reference internal\" href=\"/id/6.1/topics/cache/#cache-key-transformation\"><span class=\"std std-ref\">Perubahan kunci cache</span></a>).</p>\n</section>\n</section>","rootId":"design-philosophies","toc":[{"title":"Keseluruhan","anchor":"overall","children":[{"title":"Kehilangan sambungan","anchor":"loose-coupling","children":[]},{"title":"Kode sedikit","anchor":"less-code","children":[]},{"title":"Pengembangan cepat","anchor":"quick-development","children":[]},{"title":"Jangan Ulangi Diri anda (JUDA)","anchor":"don-t-repeat-yourself-dry","children":[]},{"title":"Eksplisit lebih baik dari pada implisit","anchor":"explicit-is-better-than-implicit","children":[]},{"title":"Konsistensi","anchor":"consistency","children":[]}]},{"title":"Model","anchor":"models","children":[{"title":"Eksplisit lebih baik dari pada implisit","anchor":"id7","children":[]},{"title":"Sertakan semua ranah logika yang terhubung","anchor":"include-all-relevant-domain-logic","children":[]}]},{"title":"API Basisdata","anchor":"database-api","children":[{"title":"Efesiensi SQL","anchor":"sql-efficiency","children":[]},{"title":"Terse, sintaks kuat","anchor":"terse-powerful-syntax","children":[]},{"title":"Pilihan menjatuhkan kedalam SQL mentah dengan mudah, ketika dibutuhkan.","anchor":"option-to-drop-into-raw-sql-easily-when-needed","children":[]}]},{"title":"Rancangan URL","anchor":"url-design","children":[{"title":"Kehilangan sambungan","anchor":"id8","children":[]},{"title":"Fleksibilitas tidak terbatas","anchor":"infinite-flexibility","children":[]},{"title":"Mendorong praktik terbaik","anchor":"encourage-best-practices","children":[]},{"title":"URL pasti","anchor":"definitive-urls","children":[]}]},{"title":"Sistem cetakan","anchor":"template-system","children":[{"title":"Pisahkan logika dari penyajian","anchor":"separate-logic-from-presentation","children":[]},{"title":"Mencegah pengulangan","anchor":"discourage-redundancy","children":[]},{"title":"Dipisahkan dari HTML","anchor":"be-decoupled-from-html","children":[]},{"title":"XML jangan digunakan untuk cetakan bahasa","anchor":"xml-should-not-be-used-for-template-languages","children":[]},{"title":"Menganggap kemampuan perancang","anchor":"assume-designer-competence","children":[]},{"title":"Perlakukan ruang kosong dengan jelas","anchor":"treat-whitespace-obviously","children":[]},{"title":"Jangan menciptakan sebuah bahasa pemrograman","anchor":"don-t-invent-a-programming-language","children":[]},{"title":"Keselamatan dan keamanan","anchor":"safety-and-security","children":[]},{"title":"Diperpanjang","anchor":"extensibility","children":[]}]},{"title":"View","anchor":"views","children":[{"title":"Kemudahan","anchor":"simplicity","children":[]},{"title":"Gunakan obyek permintaan","anchor":"use-request-objects","children":[]},{"title":"Kehilangan sambungan","anchor":"id10","children":[]},{"title":"Membedakan diantara GET dan POST","anchor":"differentiate-between-get-and-post","children":[]}]},{"title":"Kerangka kerja Tembolok","anchor":"cache-framework","children":[{"title":"Kode sedikit","anchor":"id11","children":[]},{"title":"Konsistensi","anchor":"id12","children":[]},{"title":"Diperpanjang","anchor":"id13","children":[]}]}],"breadcrumbs":[{"docname":"misc/index","title":"Dokumentasi-meta dan bunga rampai","url":"/id/6.1/misc/"}],"prev":{"docname":"misc/api-stability","title":"Keseimbangan API","url":"/id/6.1/misc/api-stability/"},"next":{"docname":"misc/distributions","title":"Penyaluran Pihak-ketiga dari Django","url":"/id/6.1/misc/distributions/"},"formats":{"html":"/id/6.1/misc/design-philosophies/","markdown":"/id/6.1/misc/design-philosophies.md","json":"/id/6.1/misc/design-philosophies.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/misc/design-philosophies.txt","official":"https://docs.djangoproject.com/id/6.1/misc/design-philosophies/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}