Django - Model Görünüm Denetleyicisi [kapalı]


110

Biri bana Django ve Model View Controller kalıbı arasındaki farkların nerede olduğunu açıklayabilir mi?

İşlevsel olarak, bu farklılıklardan ne bekleyebiliriz - yani Django'yu, örneğin Ruby on Rails'e kıyasla farklı çalışan nedir?


2
"Model Görünümü Denetleyicisi" dediğinizde, genel modeli mi yoksa belirli bir uygulamayı mı (Ruby on Rails gibi) kastediyorsunuz?
Paul D. Waite

33
Bu soru "yapıcı değil" olarak nitelendirilmez ve "münazara, argümanlar, anketler veya genişletilmiş tartışma" olmaksızın basit bir cevabı vardır. O halde neden kapatasınız?
kullanıcı

6
yapıcı değil mi? ÇOK süper modlar tekrar saldırıyor.
Amit Tripathi

4
Bugün itibariyle yaklaşık 24.000 kişi bu soruyu yapıcı buldu. Ben dahil.
frozenjim

3
2017 itibariyle, bu soru hala yapıcı
Leonardo Pessoa

Yanıtlar:


140

Django Book'a göre Django, MVC modelini MVC çerçevesi olarak adlandırılacak kadar yakından takip ediyor.

Django'ya MTV çerçevesi olarak atıfta bulunulmuştur çünkü denetleyici çerçevenin kendisi tarafından yönetilir ve heyecanın çoğu modellerde, şablonlarda ve görünümlerde gerçekleşir.

MTV / MVC hakkında daha fazla bilgiyi buradan okuyabilirsiniz:

MTV (veya MVC) Geliştirme Modeli

Böyle Ruby on gibi diğer MVC Web geliştirme çerçeveler, aşina iseniz, olmaya Django görüşü alınır kontrolörleri ve Django şablonları olmak görünümleri .

Bu, MVC'nin farklı yorumlarıyla ortaya çıkan talihsiz bir kafa karışıklığıdır.

Django'nun MVC yorumunda, görünüm kullanıcıya sunulan verileri açıklar; sadece verilerin nasıl göründüğü değil, hangi verilerin sunulduğu.

Buna karşılık, Ruby on Rails ve benzer çerçeveler, denetleyicinin işinin, kullanıcıya hangi verilerin sunulacağına karar vermeyi içerdiğini, oysa görünümün hangi verilerin sunulduğu değil, kesinlikle verilerin nasıl göründüğünü gösterdiğini öne sürmektedir.


6
Harika cevap için teşekkürler. Rails'den Django'ya gelince, bu en sinir bozucu bulduğum şeylerden birini yanıtlıyor: django neden denetleyici kodunu views.py! Adlı bir dosyaya koyuyor !?
dgmdan

@dgmdan Bu sadece varsayılan bir kuraldır, beğendiğiniz adı seçebilirsiniz. Ama katılıyorum, garip görünüyor :)
Paolo Moretti

1
View.py'yi bir görünüm katmanı olarak bırakmayı ve Django'nun kafa karışıklığını önlemek için bir kontrolör paketi içinde bir kontrol sınıfı seti oluşturmayı tercih ederim.
stanleyxu2005

5
@dgmda: Çünkü "denetleyici" kavramı web uygulamalarında yanlış bir adlandırma. MVC, yalnızca HTTP'nin durumsuz REQUEST / RESPONSE modeline uymayan olay güdümlü bir çerçevedir. İlk etapta MVC olarak adlandırılmamalıdır. Hemen hemen tüm web uygulamaları MVC değildir, ancak bir model ve genellikle Görünüm olarak adlandırılan bir işlev veya sınıf kullanır. Görünüm de HTML oluşturmayı bir Şablona devredebilir, ancak buna gerek yoktur. Yani aslında bir denetleyici yok.
Lennart Regebro

2
Lennart Regebro'nun HTTP gibi durumsuz bir modelin bir denetleyiciye sahip olmaması gerektiği ve web uygulamaları için bir MVC modelinin büyük bir kafa karışıklığı yarattığı fikrini destekliyorum
Hussam

23

Django SSS kendisi başlamak için iyi bir yerdir:

MVC yorumumuzda, "görünüm" kullanıcıya sunulan verileri açıklar. Verilerin nasıl göründüğü değil, hangi verilerin sunulduğu önemlidir. Görünüm, nasıl gördüğünüzü değil, hangi verileri gördüğünüzü açıklar. Bu ince bir ayrım.

...

Dahası, içeriği sunumdan ayırmak mantıklıdır - bu, şablonların geldiği yerdir. Django'da, bir "görünüm" hangi verilerin sunulduğunu açıklar, ancak bir görünüm normalde verilerin nasıl sunulduğunu açıklayan bir şablona delege eder.

O halde "kontrolör" nereye sığar? Django'nun durumunda, muhtemelen çerçevenin kendisidir: Django URL yapılandırmasına göre uygun görünüme bir istek gönderen makine.

Kısaltmalara açsanız, Django'nun bir "MTV" çerçevesi, yani "model", "şablon" ve "görünüm" olduğunu söyleyebilirsiniz. Bu arıza çok daha mantıklı.

"Model Görünümü Denetleyicisi" nin yalnızca bir model olduğunu, yani ortak bir mimariyi tanımlama girişimi olduğunu unutmayın. Dolayısıyla daha iyi bir soru şu olabilir: "Django, Model Görünüm Denetleyici kalıbına ne kadar iyi uyuyor?"


3
Bu belki de en doğrudan cevaptır.
kullanıcı

11

Çerçeve parçalarının adlarını düşünmeden kod yazdığınızda, aralarında şüpheli farklar yoktur, örneğin RoR. Ancak bu, verdiğiniz kullanıma bağlıdır models, çünkü Django'da, diğer çerçevelerde denetleyici düzeyinde kalacak bazı mantıkları kolayca içerirler.

viewDjango'ya ile getirilirken veriler için sorgu bir dizi olabilir ve şablonuna geçme eğilimi vardır.


10
Bir viewsDjango gibi bir şey controllerMVC ve templateDjango daha muhtemel bir olduğunuviews
Roel

7

Mvt'de, bir URL'ye bir istek bir View'e gönderilir. Bu Görünüm, Modeli çağırır, manipülasyonlar gerçekleştirir ve verileri çıktı için hazırlar. Veriler, yanıt olarak yayınlanan bir Şablona aktarılır. ideal olarak web çerçevelerinde, denetleyici görünümden gizlenir.

MVC'den fark buradadır: mvc'de, kullanıcı gui ile etkileşime girer, denetleyici isteği işler ve modeli bilgilendirir ve görünüm, sonucu kullanıcıya göstermek için modeli sorgular.

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.