Rumah > Artikel > Operasi dan penyelenggaraan > Apakah kaedah pembangunan Django
Django, sebagai rangka kerja aplikasi web yang berkuasa, secara beransur-ansur menjadi popular dalam beberapa tahun kebelakangan ini, dan semakin ramai pembangun Python menerima Django , tetapi juga disebabkan oleh banyaknya kandungan dalam Django, apabila semua orang mula-mula memasuki Django, mereka sentiasa berasa sedikit "sedikit terharu" dan tidak tahu dari mana hendak bermula. Atau selepas pemahaman awal, anda masih tidak pasti sama ada pendekatan semasa adalah elegan, cara mengatur projek dan cara menjadikan kod lebih boleh digunakan semula.
Struktur projek yang baik adalah separuh daripada perjuangan.
Secara lalai, struktur projek yang dihasilkan oleh Django adalah lebih kurang seperti ini:
Seperti yang anda mahu Memandangkan bilangan aplikasi dalam projek terus meningkat, bilangan pakej dalam direktori akar tempatan akan terus meningkat, menjadikannya semakin sukar untuk diselenggara Oleh itu, kami perlu mempunyai rancangan yang jelas untuk keseluruhan projek dan meletakkan setiap satu dengan sewajarnya fail.
Jika projek itu kecil dan anda tidak bercadang untuk menggunakan semula Aplikasi di dalamnya, anda boleh mempertimbangkan kaedah berikut:
folder venv Persekitaran virtualenv tempat projek disimpan adalah pilihan dan boleh diletakkan di tempat lain.
Pangkalan data ialah Apl yang digunakan khusus untuk menyimpan model dan mengurus arahan serta beberapa penapis tersuai yang digunakan dalam templat Ia disimpan dalam direktori akar projek.
dokumen dan log masing-masing menyimpan dokumen berkaitan projek dan fail log yang dijana semasa masa jalan.
statik menyimpan fail statik, seperti css/js/img/font, dsb.
menggunakan menyimpan fungsi alat, kelas yang digunakan dalam projek dan beberapa modul biasa, seperti pembalak, dsb.
templat menyimpan fail templat Templat induk atau templat yang diwarisi oleh berbilang templat diletakkan dalam direktori akar dan dinamakan dengan nama seperti asas untuk penyelenggaraan mudah .
Direktori web menyimpan semua Aplikasi Jika terdapat banyak Aplikasi, ia boleh dibahagikan kepada lebih banyak pakej untuk perancangan. Setiap pakej menyimpan jenis Aplikasi.
Dalam bahagian modul Model, kami terutamanya mengambil berat tentang pemetaan data ke kelas Dalam keadaan biasa, kelas yang sepadan dengan setiap jadual akan diletakkan dalam a fail berasingan, dan Import kelas yang sepadan dalam models/__init__.py mengikut urutan, supaya apabila digunakan di tempat lain, mereka boleh diimport melalui database.models import xxxx Apabila menamakan kelas, adalah disyorkan untuk menambah nama projek itu. Sebagai contoh, saya mempunyai projek di sini dengan nama Cherry, maka semua kelas adalah CherryLeaks, CherryVulns, dll. Ia akan menjadi jelas sepintas lalu semasa kod reivew dan proses penulisan, mengetahui bahawa kelas ini mewakili data.
Adalah disyorkan untuk menambah pengurus berasingan untuk Model dan melaksanakan kaedah yang sepadan untuk mengelakkan operasi berulang.
Selain itu, terdapat beberapa cadangan, yang boleh dipilih mengikut situasi sebenar:
Tidak digalakkan menggunakan jenis seperti kunci asing
Tambahkan is_deleted pada setiap jadual, created_time, updated_time fields
Gunakan indeks dengan baik
Kebanyakan logik perniagaan harus diletakkan dalam bahagian View, yang sepatutnya menjadi teras. Ia juga disyorkan di sini untuk meletakkan semua Paparan dengan fungsi yang serupa dalam fail yang sama. Untuk memudahkan penyelenggaraan dan pembangunan masa hadapan, fail ini harus diletakkan dalam pakej bernama "pengawal" atau "pandangan". Sebagai contoh, pengendalian penghalaan berkaitan projek semuanya diletakkan dalam controller/project.py.
Utamakan menggunakan beberapa kelas View terbina dalam Django, seperti ListView, TemplateView, dsb. Jika anda perlu melaksanakan View sendiri, adalah disyorkan untuk menggunakan paparan berasaskan Kelas untuk merangkum kaedah permintaan yang berbeza ke dalam kaedah yang berbeza untuk keselesaan masa hadapan.
Untuk fail templat, cara terbaik ialah memotong halaman dan fungsi yang berbeza ke dalam fail templat yang berbeza, dan menyimpannya dalam folder di bawah nama Aplikasi, supaya dalam Semasa penyelenggaraan kemudian , anda boleh mencari fail templat yang sepadan dengan cepat daripada setiap Aplikasi.
Selain itu, adalah amat disyorkan untuk menggunakan fungsi warisan templat Semua halaman diwarisi daripada templat induk, dan pelbagai blok digunakan untuk mengembangkan halaman Nama blok setiap kedudukan ditakrifkan dalam induk templat. Menyediakan penggantian templat kanak-kanak. Adalah disyorkan untuk menggunakan nama popular dan pendek untuk setiap blok, seperti: bar sisi, skrip, pengepala, kandungan_utama, tajuk_halaman, perihalan_halaman, dsb.
Untuk fungsi biasa, seperti kotak ulasan, anda boleh mempertimbangkan untuk menyimpannya dalam fail berasingan dan memuatkannya melalui {% include 'filename.tpl.html' %} jika perlu. Perlu diingatkan bahawa jika anda perlu menggunakan lanjutan dan memasukkan arahan pada masa yang sama, anda mesti menggunakannya dalam blok, jika tidak ia akan menjadi tidak sah. Contoh berikut adalah tidak sah:
hendaklah digunakan seperti berikut:
Fleksibiliti bahasa Python membuatkan kita kadangkala terlupa jenis parameter atau jenis pulangan kaedah tertentu semasa menulis kod. Dalam kes ini, kita perlu menggunakan docstring untuk menyediakan anotasi maklumat yang jelas untuk setiap kaedah supaya orang lain boleh membangunkan dan mengekalkannya. Rujuk pautan ini, jika anda menggunakan PyCharm, anda boleh menulis docstring pelengkapan automatik.
Dalam banyak kes, kaedah kami perlu mengembalikan berbilang nilai kepada pemanggil, atau kembali ke bahagian hadapan melalui JSON Jika data dikembalikan secara rawak, ia akan membawa kepada kekacauan pembangunan, pada akhirnya kita tidak tahu apa kaedah yang dikembalikan.
Pendekatan yang lebih baik ialah bersetuju dengan format pemulangan Untuk kembali kepada pemanggil, cuma kembalikan tuple dan tulis makna setiap nilai dalam docstring. Selain memulangkan hasil, kadangkala kita perlu mengembalikan ralat untuk menunjukkan sama ada masalah atau pengecualian berlaku semasa pemprosesan data. Secara amnya, terdapat beberapa kaedah yang tersedia:
Lemparkan pengecualian melalui kenaikan
Kembali melalui berbilang nilai pulangan, seperti err, result = func()
Dikembalikan melalui atribut dalam kelas, seperti instance = Class(); err = instance.error_message
Ketiga-tiga kaedah ini mempunyai kebaikan dan keburukan, dan anda perlu memilih mengikut situasi sebenar projek , tidak kira mana yang digunakan Kedua-dua kaedah perlu disatukan sepanjang projek dan tidak boleh dicampur sebanyak mungkin
Untuk JSON yang dikembalikan ke bahagian hadapan, ia perlu sedikit lebih rumit, pada; sekurang-kurangnya 2~3 medan mesti dikembalikan:
kod ialah kod status yang dikembalikan oleh panggilan ini, yang boleh dipersetujui berdasarkan situasi sebenar. Mesej ialah mesej kod status yang mudah difahami yang boleh digunakan oleh pembangun untuk menyahpepijat dan memberikan pemberitahuan kepada pengguna. data ialah maklumat data sebenar yang dikembalikan Dalam banyak kes, medan ini mungkin tidak diperlukan Format medan khusus juga perlu dipersetujui semula berdasarkan situasi sebenar.
Penghalaan yang elegan dan ringkas memastikan kualiti projek dan mengurangkan kos penyelenggaraan.
Django mempunyai sistem penghalaan yang berkuasa dan algoritma penghalaan yang boleh memenuhi pelbagai keperluan dalam perniagaan, dan konfigurasi adalah fleksibel dan mudah Setiap fail konfigurasi penghalaan adalah URL PATH ke Fungsi /pemetaan kelas. Semuanya boleh disediakan sendiri, tanpa tertakluk kepada rangka kerja atau sekatan lain. Anda boleh merujuk kepada bahagian dokumentasi ini tentang strategi penghalaan permintaan Django.
Dalam mengkonfigurasi penghalaan, anda boleh menyertakan beberapa pembolehubah dalam kurungan sudut untuk penggunaan yang lebih mudah kemudian. Sesetengah "Penukar Laluan" boleh digunakan dalam kurungan sudut untuk menentukan jenis pembolehubah, seperti str, int, slug, uuid, laluan. Fail penghalaan URL lengkap kelihatan seperti berikut:
Selain itu, anda juga boleh menetapkan padanan biasa dalam laluan melalui re_path:
Kadangkala, anda mungkin mahu menambah laluan lalai untuk sesetengah URL Contohnya, apabila mengakses /blog/, halaman lalai akan dikembalikan dan apabila mengakses /blog/page
4.3 Ruang nama
Secara amnya, setiap projek Django kami terdiri daripada berbilang Apl Jika semua laluan Apl diletakkan dalam URLCONF_ROOT , lama kelamaan fail ini akan menjadi lebih banyak dan lebih sukar untuk dikekalkan dan sangat mengelirukan. Laluan dengan nama yang sama boleh digunakan dalam apl berbeza, menyebabkan konflik. Untuk menyelesaikan masalah ini, kami boleh menggunakan "pemasukan laluan" dan "ruang nama" untuk menyelesaikannya Terutama jika anda menyelenggara Apl yang boleh digunakan semula, untuk memastikan keunikan laluan, ruang nama amat penting.
Biasanya terdapat dua jenis ruang nama: Ruang nama aplikasi dan ruang nama Instance Contohnya, admin:index mewakili laluan indeks ruang nama pentadbir. Untuk maklumat lanjut tentang bahagian ini, sila rujuk: Dokumen Rasmi
Ruang Nama Aplikasi lebih mudah difahami Ia merujuk kepada ruang nama pada peringkat aplikasi Ia biasanya disusun dengan cara berikut:
Ruang Nama Contoh merujuk kepada contoh. . Ruang nama Tahap sering digunakan apabila Apl dibuat beberapa kali Untuk membezakan setiap kejadian, Ruang Nama Instance perlu diperkenalkan. Mari kita lihat contoh dalam dokumentasi rasmi:
Anda boleh melihat bahawa dua laluan tinjauan pendapat pengarang dan tinjauan penerbit sebenarnya mengandungi laluan yang sama, tetapi nyatakan yang berbeza Ruang nama, ini ialah ruang nama peringkat Instance, iaitu, ruang nama objek yang sedang diakses. Identiti pengguna yang berbeza akan mendapat ruang nama yang berbeza apabila mengakses URL yang berbeza Contohnya, pelawat dan pentadbir kedua-duanya mengakses halaman yang ditunjukkan oleh tinjauan pendapat: indeks, tetapi disebabkan ruang nama yang berbeza, mereka akan mendapat hasil yang berbeza.
Atas ialah kandungan terperinci Apakah kaedah pembangunan Django. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!