python işletme mantığı django'da tam olarak nereye yerleştirilmelidir?


26

Django / Python / Web Development'ı öğrenmeye yeni başladım. Bu sorun bir süredir beni rahatsız ediyor.

Django'da birden fazla şablon içeren bir uygulama oluşturuyorum. Temelde sadece ilgili şablonlara verilen yanıtları veren bir views.py dosyasına sahibim ve DB'mi yapılandırdığım bir models.py'ye sahibim. Şablonlarımdan birinde (yapabileceğim) bir resim yüklemem ve yüklenen resmin özelliklerine dayanan (henüz yapılmamış) bir mantık çalıştırmam gerekiyor. Bu mantık çok fazla ağır hesap gerektirir. Hesaplamaları yaptıktan sonra, mantık bazı işlenmiş bilgileri (koordinatlar) şablona döndürmelidir.

Tüm bu işlemleri başarılı bir şekilde, birbiri ardına python dosyalarını çağıran bağımsız bir python masaüstü uygulamasında yapabildim. Ancak, şimdi bunu bir web uygulaması yapmak istediğimden beri Django çerçevesini kullanmaya başladım.

Çok fazla arama yaptım ancak hala tüm mantığı içeren bu Python dosyasını nereye yerleştirmem gerektiğini çözemiyorum. Başka bir sınıf tabanlı dosyaya sahip olmalı mıyım (logic.py)ve view.py? Googled ve birçok geliştiricinin iş mantığını Django'daki models.py dosyasına yerleştirdiğini öğrendim. Ancak, modelin yalnızca arka uçla iletişim kurması gerektiğinden sezgisel olarak doğru olmadığını hissediyorum. Herhangi bir yardım takdir edilecektir. Şimdiden teşekkürler.



Bu konuyu kapsamlı bir şekilde tartışan bir makale buldum (django değil, akılda piramitle). Bazı duyusal thaughts var: nando.oui.com.br/2014/04/01/…
kratenko

Yanıtlar:


16

Çok fazla arama yaptım ancak hala tüm mantığı içeren bu Python dosyasını nereye yerleştirmem gerektiğini çözemiyorum.

Gereksinimlerinizin ne olduğuna bağlı olarak çeşitli seçenekler vardır:

  1. Mantığı, örneğin Imagemodele ekleyin . Görüntü başına meta verilerini veritabanında saklamanız gerekiyorsa ve her model örneği (her görüntü) kendi başına işlenirse, bu kullanışlı bir seçenektir.

  2. Mantığı düz bir Python Imagesınıfı olarak ekleyin , örneğin adı verilen bir dosyaya image.py. Django'daki hiçbir şey sizi viewsveya modelsmodüllerinde bunun dışında bir mantık eklemenizi engellemez . Görüntü mantığı, Django uygulamanızın (örneğin bir Görüntü işleme uygulaması) merkezi bir bileşeni ise bu iyi bir seçenektir.

  3. Mantığı sağlayan ayrı bir Python projesi oluşturun, ardından görüşlerinizden arayın. Bu projeyi Django uygulamanızın Python ortamında yüklediğinizden emin olun. Bu seçenek, Django uygulamanızın amacı görüntüleri yüklemek ve görüntülemek veya bir kullanıcının isteğine doğrudan yanıt olarak görüntü işleme sonuçlarını göstermek, ancak görüntü işlemenin başka projeler tarafından da kullanılabildiği durumlarda geçerlidir.

  4. İstekleri zaman uyumsuz olarak işleyen ve Django uygulamanızdan ayrı olarak çalışan ayrı bir uygulama oluşturun. Bu seçenek, görüntü işlemeyi uygulamanın istek döngüsünden ayırmanız, çok sayıda görüntüyü işlemeniz veya her bir işlemin bir istek döngüsünün süresi içinde çözülmesi için çok zaman harcadığı durumlarda (örneğin en fazla 500ms ila 1s) .

Modelin yalnızca arka uçla iletişim kurması gerektiğinden sezgisel olarak doğru olmadığını hissediyorum.

Django'da arka uç ile iletişim kurmak için bir model veya veri tabanı gerektiren hiçbir şey yoktur. Bence, Django'nun tipik olarak bir model olarak gördüğü şeyin anlamını karıştırıyorsunuz (yani, veritabanındaki bir veya birkaç tablonun bir soyutlaması), bir tasarım konstrüksiyonu olarak model terimi (ör. Domain Driven Design'da olduğu gibi).


Teşekkürler! Gerçekten anlayışlıydı. 3 numaralı seçenek benim için yeterince iyi olmalı. :)
adrita

Cevabı olumsuz olarak değerlendirmek doğru, lütfen yorum ekleyelim, böylece geliştirebilirim
miraculixx

5

"İki Kepçe Django’nun ortak yazarı Daniel Greenfeld, iş mantığının modellerde olması gerektiğini" veya mümkünse formlarda olması gerektiğini "önerdi. MVC değil. Burada resmi django belgelendirme sss .


önerileriniz için teşekkürler. kesinlikle belgeleri
geçecek

Düzeltmene sevindim, @miraculixx sağlam bir açıklama yaptı. Eğer fb'deyseniz, django python framework grubuna katılın.
diek

2

Resmi Django belgelerinde https://docs.djangoproject.com/en/1.11/ yazıyor:

Django, bir kullanıcının isteğini işlemekten ve yanıtı geri vermekten sorumlu mantığı kapsamaya yönelik “görüşler” kavramına sahiptir. Aşağıdaki bağlantılardan görünümler hakkında bilmeniz gereken her şeyi bulun:

Django, mantığın görünümler içinde tutulmasını önerir.


3
Bu mutlaka iş mantığı ile aynı değildir.
FirstLastname

1
Django belgelerinin bu yorumu ile aynı fikirde değilim. Django dokümantasyonunun başka bir yerinde (örneğin Model.clean()), biraz daha açık bir şekilde ima edilir (eğer sadece gerçek dünyaya ait bir Django projesini modellere, şablonlara ve görünümlere çevirirsek) - iş mantığı (ya da en azından doğrulama) model katmanı. Bu sadeleştirmeye, aynı zamanda kabul edilebilir formları dahil etmediğime dikkat edin.
Kye R,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.