Saya memiliki "produk" yang cukup kompleks. Saya sedang bersiap untuk membangun menggunakan Django. Saya akan menghindari penggunaan istilah "proyek" dan "aplikasi" dalam konteks ini, karena saya tidak jelas tentang arti khusus mereka di Django.
Proyek dapat memiliki banyak aplikasi. Aplikasi dapat dibagikan di antara banyak proyek. Baik.
Saya tidak menciptakan kembali blog atau forum - Saya tidak melihat ada bagian dari produk saya yang dapat digunakan kembali dalam konteks apa pun. Secara intuitif, saya akan menyebut ini "aplikasi." Apakah saya kemudian melakukan semua pekerjaan saya dalam satu folder "aplikasi"?
Jika demikian ... dalam hal project.app
namespace Django , kecenderungan saya adalah menggunakanmyproduct.myproduct
, tetapi tentu saja ini tidak diperbolehkan (tapi aplikasi yang saya bangun adalah proyek saya, dan proyek saya adalah aplikasi!). Karena itu saya percaya bahwa mungkin saya seharusnya mendekati Django dengan membangun satu aplikasi per model "signifikan", tetapi saya tidak tahu di mana harus menggambar batas-batas dalam skema saya untuk memisahkannya ke dalam aplikasi - Saya punya banyak model dengan hubungan yang relatif kompleks.
Saya berharap ada solusi umum untuk ini ...
Jawaban:
Apa yang menghentikan Anda menggunakan
myproduct.myproduct
? Apa yang perlu Anda capai yang secara kasar terdiri dari melakukan ini:dan seterusnya. Apakah akan membantu jika saya mengatakan
views.py
tidak perlu dipanggilviews.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:
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.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 melihatinputtypes.py
saya mungkin tidak begitu jelas tentang apa artinya tanpa melihatnya.sumber
manage.py
, sehingga tidak dapat mengimpor pengaturan proyek Anda dengan benar. Ini terjadi pada saya, dan saya menyelesaikannya dengan refactoring aplikasimyproduct_app
.Setelah Anda lulus dari menggunakan
startproject
danstartapp
, tidak ada yang menghentikan Anda untuk menggabungkan "proyek" dan "aplikasi" dalam paket Python yang sama. Sebuah proyek benar-benar tidak lebih dari sebuahsettings
modul, dan sebuah aplikasi benar-benar tidak lebih dari sebuahmodels
modul — semua yang lain adalah opsional.Untuk situs kecil, sepenuhnya masuk akal untuk memiliki sesuatu seperti:
sumber
INSTALLED_APPS
daftar. Berikut ini sebuah contoh: stackoverflow.com/a/59739912/399435Saya membaca pemikiran ini di suatu tempat segera setelah saya mulai bekerja dengan Django dan saya menemukan bahwa saya cukup sering mengajukan pertanyaan ini pada diri saya dan itu membantu saya.
Aplikasi Anda tidak harus dapat digunakan kembali, mereka dapat saling bergantung, tetapi mereka harus melakukan satu hal.
sumber
Saya menemukan posting blog berikut ini sangat berguna tentang aplikasi dan proyek Django:
Pada prinsipnya, Anda memiliki banyak kebebasan dengan Django untuk mengatur kode sumber produk Anda.
sumber
Tidak ada yang seperti tidak diizinkan. Ini proyek Anda, tidak ada yang membatasi Anda. Dianjurkan untuk menyimpan nama yang masuk akal.
Dalam proyek Django umum ada banyak aplikasi (aplikasi contrib) yang benar-benar digunakan dalam setiap proyek.
Katakanlah proyek Anda hanya melakukan satu tugas dan hanya memiliki satu aplikasi (saya
main
beri nama karena proyek ini berputar di sekitarnya dan sulit dicolokkan). Proyek ini juga masih menggunakan beberapa aplikasi lain pada umumnya.Sekarang jika Anda mengatakan bahwa proyek Anda menggunakan hanya satu aplikasi (
INSTALLED_APPS='myproduct'
) jadi apa gunanyaproject
mendefinisikan proyek sebagaiproject.app
, saya pikir Anda harus mempertimbangkan beberapa poin:Sejauh sebagian besar pekerjaan yang dilakukan dalam aplikasi terkait, saya pikir itu adalah kasus dengan sebagian besar proyek Django.
sumber
main
konvensi - itu masuk akal bagi saya untuk proyek asli seperti ini. Saya berencana menambahkan aplikasi "yang dapat digunakan kembali" nanti, tapi itu jauh di luar fokus saya sekarang.Di sini pencipta Django menunjukkan perbedaan itu sendiri . Saya pikir berpikir tentang Aplikasi karena harus digunakan kembali dalam proyek lain adalah baik . Juga cara berpikir yang baik tentang Aplikasi di Django menyediakan aplikasi web modern.
Bayangkan Anda membuat aplikasi web dinamis besar berdasarkan JavaScript .
Anda dapat membuat kemudian di App Django bernama misalnya "FrontEnd" <- dalam aplikasi Thins Anda akan menampilkan konten.
Kemudian Anda membuat beberapa Aplikasi backend. Misalnya Aplikasi bernama "Komentar" yang akan menyimpan komentar pengguna. Dan "Komentar" Aplikasi tidak akan menampilkan apa pun itu sendiri. Itu hanya API untuk permintaan AJAX dari situs web JS dinamis Anda .
Dengan cara ini Anda selalu dapat menggunakan kembali aplikasi "Komentar" Anda. Anda dapat menjadikannya open source tanpa membuka sumber seluruh proyek. Dan Anda menjaga logika proyek Anda tetap bersih .
sumber