2

我注意到框架,如flask通常有一個模塊名爲views容納:哪個項目結構按照MVC是正確的?

@app.route('/') 
def index(): 
    return render_template('index.html') 

類型的定義,然後jinja2模板是templates目錄下,但很多node.js框架(帆,geddy ,locomotive)傾向於將.ejs模板替換爲views目錄,並且沒有templates目錄。

看來這不應該是主觀的;這是根據MVC模型正確的?模板文件應該位於views目錄下還是應該使用url處理程序定義?據我所知,flask應用似乎有views的正確定義;如果事實上如此,那麼燒瓶控制器是在哪裏進來呢還是這些定義控制器呢?

+2

確實沒有標準,因爲MVC只是一種跨語言和平臺模式,而不是一個實現規範。我通常會遵循特定的MVC庫結構建議。 – WiredPrairie

+0

Flask不是一個MVC框架。 'views.py'已經成爲慣例,但並不是必需的。 「模板」是模板的默認位置,但可以使用「template_folder」參數進行更改。 – dirn

回答

2

有是沒有對錯的方式,MVC模式爲您提供了關注點分離的指導方針,它並不告訴您如何命名或組織事物。

這裏是我怎麼想的MVC組件映射到燒瓶中的應用:

  • 的M是最容易理解的,因爲是相當清楚的指定車型。有時候不完全清楚的是,模型不僅僅是數據庫抽象,應用程序的業務邏輯也是模型的一部分。

  • V涵蓋了演示邏輯。在一個精心設計的Flask應用程序中,這是通過模板處理的,所以我會說MVC模板== V.

  • C覆蓋了一個薄層,它根據從接收到的輸入更新M和V用戶。在Flask應用程序中,這些請求處理程序具有「視圖函數」的某種誤導性名稱。當一個視圖函數完成時,它會向用戶返回一個更新的視圖(呈現的模板)。

2

當談到像Flask或Django這樣的框架時,他們寧願使用MVT(模型/視圖/模板),但它與MVC類似,除了術語。不同之處在於MVT中的'T'代表Template,它實際上是MVC中的Controller。因此,Flask中的View與Controller相同。

所以,不要把它當成模板VS觀點,但重點部分,你仍然有3個部分組成:模型,業務邏輯(圖/控制器等),視覺效果(模板/ HTML等)