Apa yang menghentikan Anda menggunakan myproduct.myproduct
? Apa yang perlu Anda capai yang secara kasar terdiri dari melakukan ini:
django-admin.py startproject myproduct
cd myproduct
mkdir myproduct
touch myproduct/__init__.py
touch myproduct/models.py
touch myproduct/views.py
dan seterusnya. Apakah akan membantu jika saya mengatakan views.py
tidak perlu dipanggil views.py
? Asalkan Anda bisa memberi nama, di jalur python, fungsi (biasanya package.package.views.function_name) itu akan ditangani. Sederhana seperti itu. Semua "proyek" / "aplikasi" ini hanyalah paket python.
Sekarang, bagaimana Anda melakukannya? Atau lebih tepatnya, bagaimana saya bisa melakukannya? Nah, jika Anda membuat sepotong signifikan fungsi dapat digunakan kembali, seperti mengatakan editor markup, saat itulah Anda membuat "tingkat atas aplikasi" yang mungkin berisi widgets.py
, fields.py
,context_processors.py
dll - semua hal yang Anda mungkin ingin impor.
Demikian pula, jika Anda dapat membuat sesuatu seperti blog dalam format yang cukup umum di seluruh pemasangan, Anda dapat membungkusnya dalam suatu aplikasi, dengan templat sendiri, folder konten statis dll, dan mengonfigurasikan instance dari proyek Django untuk menggunakannya konten aplikasi.
Tidak ada aturan keras dan cepat yang mengatakan Anda harus melakukan ini, tetapi itu adalah salah satu tujuan kerangka kerja ini. Fakta bahwa semuanya, termasuk template, memungkinkan Anda untuk memasukkan dari beberapa basis umum berarti blog Anda harus pas dengan pengaturan lain, hanya dengan menjaga bagiannya sendiri.
Namun, untuk mengatasi masalah Anda yang sebenarnya, ya, tidak ada yang mengatakan Anda tidak dapat bekerja dengan folder proyek tingkat atas. Itulah yang dilakukan aplikasi dan Anda dapat melakukannya jika Anda benar-benar menginginkannya. Namun saya cenderung tidak, karena beberapa alasan:
- Pengaturan default Django tidak melakukannya.
- Seringkali, saya ingin membuat aplikasi utama, jadi saya membuatnya, biasanya disebut
website
. Namun, di kemudian hari saya mungkin ingin mengembangkan fungsionalitas asli hanya untuk situs ini. Dengan maksud untuk membuatnya dapat dilepas (apakah saya pernah melakukannya atau tidak) saya cenderung kemudian membuat direktori terpisah. Ini juga berarti saya dapat menghapus fungsionalitas tersebut hanya dengan memutus tautan paket itu dari konfigurasi dan menghapus folder, daripada menghapus url yang tepat dari folder global urls.py.
- Sangat sering, bahkan ketika saya ingin membuat sesuatu mandiri, perlu tempat tinggal sementara saya menjaganya / membuatnya mandiri. Pada dasarnya kasus di atas, tetapi untuk hal-hal yang saya lakukan bermaksud membuat generik.
- Folder tingkat atas saya sering berisi beberapa hal lain, termasuk tetapi tidak terbatas pada skrip wsgi, skrip sql, dll.
- ekstensi manajemen django bergantung pada subdirektori. Jadi masuk akal untuk memberi nama paket dengan tepat.
Singkatnya, alasan ada konvensi sama dengan konvensi lainnya - ini membantu ketika berbicara dengan orang lain yang bekerja dengan proyek Anda. Jika saya melihat fields.py
saya langsung berharap kode di dalamnya untuk subclass bidang Django, sedangkan jika saya melihat inputtypes.py
saya mungkin tidak begitu jelas tentang apa artinya tanpa melihatnya.