我注意到flask
这样的框架通常有一个名为views
的模块来容纳:
@app.route('/')
def index():
return render_template('index.html')
定义类型然后jinja2
模板位于templates
目录下,但是很多node.js
框架(sails,geddy,locomotive)倾向于放置{{1}相反,.ejs
目录中的模板没有views
目录。
这似乎不应该是主观的;根据{{1}}模型,这是正确的吗?模板文件应该在views目录下还是url处理程序定义?据我所知,templates
应用程序似乎有MVC
的正确定义;如果实际上是这样的话,那么烧瓶控制器会在哪里进入,或者这些定义控制器也是这样?
答案 0 :(得分:3)
对于像Flask或Django这样的框架,他们更喜欢使用MVT(模型/视图/模板),但除了术语之外,它与MVC类似。区别在于' T'在MVT中代表模板,它实际上是MVC中的控制器。因此Flask中的View与Controller相同。
因此,不要将其视为模板与视图,而应关注您仍有3个组件的部分:模型,业务逻辑(视图/控制器等),Visual(模板/ html等)
答案 1 :(得分:2)
没有正确或错误的方式,MVC模式为您提供了关注点分离的指导,它没有告诉您如何命名或组织事物。
以下是我认为MVC组件映射到Flask应用程序的方式:
M是最容易理解的,因为模型非常明确。有时不完全清楚的是,模型不仅仅是数据库抽象,应用程序的业务逻辑也是模型的一部分。
V涵盖了表示逻辑。在设计精良的Flask应用程序中,这是使用模板处理的,所以我想说的是MVC模板== V。
C覆盖一个薄层,根据从用户收到的输入更新M和V.在Flask应用程序中,这些是请求处理程序,它具有一些误导性的“视图函数”名称。当视图函数完成时,它会向用户返回更新的视图(呈现的模板)。