2012-02-17 12 views
11

Quali sono gli equivalenti Pyramid/Python di Model - View - Controller di Framework PHP come Kohana?Pyramid: Equivalente di MVC in PHP Framework in Pyramid/Python?

In Pyramid "Model" is .... and it is used for ..... 
In Pyramid "View" is .... and it is used for ..... 
In Pyramid "Controller" is .... and it is used for ..... 

Sto cercando di capire la logica di Pyramid. Come aggiunta alla risposta, qualsiasi aiuto, documentazione ecc. Sarebbe apprezzato.

Grazie.

risposta

19

Piloni, uno dei due framework che si univano per essere Pyramid (l'altro era repoze.bfg) era "vicino" a un sistema MVC.

Mi sono avvicinato alle quotazioni, perché negli ultimi anni molte persone hanno litigato su ciò che MVC significa ... e molti progetti che una volta si sono detti "MVC" hanno iniziato a chiamarli "MTC" (modello controller modello) "MT" (modello modello) o "MV" (vista modello). Tutti sono d'accordo su cosa sia il "modello", ma esattamente su cosa la "vista" e il "controllore" mappano - su un determinato contesto - possono essere un punto di contesa.

Piramide e piloni hanno entrambi una funzionalità "dispatcher" per impostare la mappatura per una richiesta. Sotto piloni è in config/routes.py; sotto Pyramid è un po 'diverso - gli scaffold di default hanno il routing in app/init .py, ma sei libero di scomporlo in app/routes.py o usa config.include() per spingerlo dentro di te "gestori" o config.scan() per estrarlo dalle "viste".

"handlers" in piramide sono forniti da pyramid_handlers e sono davvero solo "viste" con un po 'di roba di generazione automatica. Se lo volevi, le tue app potrebbero usare entrambi i gestori e le visualizzazioni (le mie).

In ogni caso, a seconda di come si interpretano MVC/MTC/etc, questo è un tavolo loose di ciò che si potrebbe desiderare:

  || mvt   | mvc   | mvc 
========================================================================== 
model  || sqlalchemy  | sqlalchemy  | sqlalchemy 
view  || views/handlers | templates  | views/handlers + templates 
controller ||    | views/handlers | dispatch/routing 
template || templates  |    | 

nota- rapida Sto definendo quanto sopra non in base alla mia interpretazione o cosa è la definizione MVC "ufficiale" ... Si basa su come gli altri framework popolari si commercializzano da soli.

5

Dal Pyramid Introduction:

Tu dici Piramide è MVC, ma dov'è il controllore?

Gli autori di Pyramid credono che il modello MVC non si adatti proprio al web molto bene. In un'applicazione Pyramid, c'è un albero delle risorse , che rappresenta la struttura del sito e le viste, che tendono a presentare i dati memorizzati nell'albero delle risorse e un "modello di dominio" definito dall'utente . Tuttavia, nessuna struttura fornita dal framework corrisponde necessariamente al concetto di "controller" o "modello". Quindi, se dovessi dargli un acronimo, suppongo che tu dica Pyramid è in realtà un framework "RV" piuttosto che un framework "MVC". "MVC", tuttavia, è abbastanza vicino come un moniker di classificazione generale per scopi di confronto con altri framework web.

+0

Ciao, ho letto tutto questo sulla loro pagina web e ho anche guardato degli esempi, ma non riesco ancora a ottenerlo quindi cercare una spiegazione da un altro sviluppatore PHP che possa metterlo nei termini indicati nella mia domanda, in modo che io possa capire esso. Grazie. – Phil

+0

Ma gli sviluppatori di Pyramid ti stanno dicendo che non c'è un'analogia diretta. Perché non ti fidi di loro? – Wilduck

+1

No no, mi fido di loro. Le persone Python sono davvero belle. Mi piacerebbe solo capire la logica dietro. Ad esempio, in Kohana è semplice. Definire gli URI, attivare un controller dall'URI, dire al controllore di fare cose, ad esempio, usare una classe modello per effettuare chiamate DB, quindi includere un modello o due, mescolare i due create-render la risposta e inviarla indietro. Voglio solo sapere come si svolge questo processo con Pyramid. Mi piace molto la sintassi di Python e voglio approfondirla. Grazie. – Phil

2

Ho esperienza con CakePHP e ora sto iniziando con Pyramid e Python. Non esiste una mappatura diretta ma non è perché la piramide fa cose in modo bizzarro ma perché gli autori di framework hanno abusato del termine MVC.

In Cake, ad esempio, ci sono alcune classi che a loro piace chiamare "Modelli" ma la maggior parte delle volte sono solo classi ORM. I controller sono principalmente usati come spazi dei nomi per i metodi correlati chiamati "azioni" che trasmettono i dati alle viste, che sono solo i modelli.

In termini piramidali, "Risorse" sono i "modelli", e sei libero di usare dove vuoi qui, se vuoi un ORM puoi usare SQLAlchemy per esempio o mongodb o dovunque.

Lo stesso framework funziona come "controller" e le azioni sono denominate "views", possono essere normali funzioni o classi, siete liberi di organizzarli dove volete. Questa vista può utilizzare un modello e un renderer per costruire la risposta che viene inviata al browser.

Speranza che aiuta (chiedo scusa per il mio cattivo inglese)

+0

Grazie mille per questa gentile risposta.Se non ti dispiace, mi piacerebbe farti qualche altra domanda. In PHP (in generale), decomprimi i file, li metti in una cartella e apache + php lo esegue. In Python, ho difficoltà a capire come funziona. Ogni cartella è considerata una "app"? Come può un web-server ospitare più siti web Python? E a che cosa serve WCGI? Voglio entrare in Python ma sembra complicato per quanto riguarda WCGI e tutti questi strumenti da riga di comando. – Phil

11

Se si vuole, con la piramide è possibile simulare il pattern MVC:

  • Modello: Ad esempio, utilizzando sqlalchemy (http: // docs. sqlalchemy.org)
  • Visualizza: Utilizzo di modelli e metodi di visualizzazione.
  • Controller: È possibile utilizzare i pyramid_handlers pacchetto, per creare i controllori e mappare le azioni definite in un percorso ad azioni nel controller, ad esempio:
 
    Class HomeController(object): 
    def __init__(self, request): 
      self.request = request 

     def form_proc(self): 
      name = self.request.params['name'] 
      ... bla, bla, bla ... 

Nella configurazione è possibile aggiungere qualcosa di simile:

 
    config.add_handler('home', '/home/{action}', 
         handler='mypackage.HomeController') 

Se si inserisce questo URL nel modulo di azione ->http://SERVER_NAME/home/form_proc, è possibile elaborare il modulo.

Pyramid ti dà tutta la flessibilità se ne hai bisogno.