di mana tepatnya logika bisnis python ditempatkan di Django

26

Saya baru saja mulai belajar Django / Python / Pengembangan Web. Masalah ini telah mengganggu saya untuk sementara waktu sekarang.

Saya membuat aplikasi dengan banyak templat di Django. Saya memiliki views.py yang pada dasarnya hanya memberikan tanggapan ke masing-masing template dan saya memiliki models.py di mana saya menyusun DB saya. Di salah satu templat saya, saya perlu mengunggah gambar (yang dapat saya lakukan) dan saya perlu menjalankan logika yang didasarkan pada fitur-fitur gambar yang diunggah (belum selesai). Logika ini melibatkan banyak perhitungan yang berat. Setelah melakukan perhitungan, logika harus mengembalikan beberapa informasi yang diproses (koordinat) ke template.

Saya telah berhasil melakukan semua tindakan ini dengan sukses dalam aplikasi desktop python mandiri yang memanggil file python satu demi satu. Namun, karena sekarang saya ingin menjadikan ini aplikasi web, saya sudah mulai menggunakan kerangka Django.

Saya telah melakukan banyak pencarian tetapi saya masih belum dapat menemukan di mana tepatnya saya harus meletakkan file Python ini yang berisi semua logika. Haruskah saya memiliki file berbasis kelas lain (logic.py)dan memanggilnya dari view.py? Saya mencari di Google dan menemukan bahwa banyak pengembang menempatkan logika bisnis mereka di models.py mereka di Django. Namun, saya merasa itu secara intuitif tidak benar karena model harus secara eksklusif berkomunikasi dengan bagian belakang. Bantuan apa pun akan dihargai. Terima kasih sebelumnya.

adrita
sumber
kemungkinan duplikat Di mana menempatkan logika bisnis dalam desain MVC?
Bart van Ingen Schenau
Menemukan sebuah artikel yang membahas topik ini secara luas (dengan piramida dalam pikiran, bukan Django). Memiliki beberapa penjarahan yang masuk akal: nando.oui.com.br/2014/04/01/…
kratenko

Jawaban:

16

Saya telah melakukan banyak pencarian tetapi saya masih belum dapat menemukan di mana tepatnya saya harus meletakkan file Python ini yang berisi semua logika.

Ada sejumlah opsi, tergantung pada apa kebutuhan Anda:

  1. Tambahkan logika ke misalnya Imagemodel. Ini adalah opsi yang berguna jika Anda perlu menyimpan meta data per-gambar dalam database, dan setiap contoh model (setiap gambar) diproses dengan sendirinya.

  2. Tambahkan logika sebagai Imagekelas Python biasa , misalnya dalam file bernama image.py. Tidak ada dalam Django yang membatasi Anda untuk menambahkan logika selain dari pada modul viewsatau models. Ini adalah pilihan yang baik jika logika gambar adalah komponen utama dari aplikasi Django Anda (misalnya aplikasi pemrosesan Gambar).

  3. Buat proyek Python terpisah yang menyediakan logika, lalu panggil dari pandangan Anda. Pastikan untuk menginstal proyek ini di lingkungan Python aplikasi Django Anda. Opsi ini berlaku jika tujuan aplikasi Django Anda adalah untuk mengunggah dan melihat gambar, atau untuk menunjukkan hasil pemrosesan gambar sebagai respons langsung terhadap permintaan pengguna, tetapi di mana pemrosesan gambar dapat digunakan oleh proyek lain juga.

  4. Buat aplikasi terpisah yang memproses permintaan secara tidak sinkron dan dijalankan secara terpisah dari aplikasi Django Anda. Opsi ini berguna jika Anda perlu memisahkan pemrosesan gambar dari siklus permintaan aplikasi, memproses sejumlah besar gambar, atau di mana setiap perhitungan membutuhkan terlalu banyak waktu untuk diselesaikan dalam waktu siklus permintaan (mis. Paling banyak dalam 500ms hingga 1s) .

Saya merasa itu secara intuitif tidak benar karena model harus berkomunikasi secara eksklusif dengan bagian belakang.

Tidak ada dalam Django yang membutuhkan model untuk berkomunikasi dengan back end, atau lebih tepatnya database. Saya pikir Anda mencampur semantik dari apa yang biasanya dianggap Django model (yaitu, abstraksi dari satu atau beberapa tabel dalam database), vs istilah model sebagai konstruksi desain (misalnya seperti dalam Desain Domain Driven).

miraculixx
sumber
Terima kasih! Itu benar-benar wawasan. Saya merasa opsi nomor 3 harus cukup baik untuk saya. :)
adrita
Tidak apa-apa untuk menilai jawaban negatif tetapi tolong tambahkan komentar agar saya dapat memperbaikinya
miraculixx
5

Daniel Greenfeld, penulis bersama "Two Scoops of Django, merekomendasikan logika bisnis harus dalam model" jika memungkinkan, atau dalam bentuk jika Anda harus. "Adapun kemungkinan duplikat Bart, Django mungkin mirip dengan MVC tetapi itu adalah bukan MVC. Seperti dijelaskan di sini di faq dokumentasi Django resmi . @adrita, saya pikir Anda perlu meninjau dokumentasi resmi untuk membantu Anda memahami konsep model, tampilan, dan templat sedikit lebih baik.

diek
sumber
terima kasih atas saran Anda. akan melalui dokumentasi pasti :)
adrita
Senang Anda memperbaikinya, @miraculixx memberikan penjelasan yang solid. Jika Anda menggunakan fb, bergabunglah dengan grup framework django python.
diek
2

Dalam dokumen resmi Django https://docs.djangoproject.com/en/1.11/ , dikatakan:

Django memiliki konsep "pandangan" untuk merangkum logika yang bertanggung jawab untuk memproses permintaan pengguna dan untuk mengembalikan respons. Temukan semua yang perlu Anda ketahui tentang tampilan melalui tautan di bawah:

Django merekomendasikan logika untuk dimuat dalam pandangan.

Simon
sumber
3
Itu belum tentu sama dengan logika bisnis.
FirstLastname
1
Saya tidak setuju dengan interpretasi dokumentasi Django itu. Di tempat lain dalam dokumentasi Django (misalnya untuk Model.clean()) tersirat sedikit lebih eksplisit bahwa (jika kita hanya proyek Django dunia nyata untuk model, template, dan pandangan) - logika bisnis (atau paling tidak, validasi) termasuk dalam lapisan model. Perhatikan bahwa saya tidak menyertakan formulir dalam penyederhanaan itu, yang juga dapat diterima.
Kye R