20

Flask 框架是否自然支持 MVC 模式?我应该将应用程序的哪些部分视为模型,将什么视为视图以及将什么视为控制器?

通常(根据我的经验)Flask 应用程序如下所示:

main_dir--|
          |
         app1--|
          |    |
          |  __init__.py
          |  api.py
          |  models.py
          |
         static--|
          |      |
          |    all the static stuff
          |
         app.py # with blueprints registering
4

3 回答 3

25

Flask 实际上并不是一个 MVC 框架。它是一个简约的框架,在构建应用程序时给了你很大的自由度,但是 MVC 模式非常适合 Flask 提供的功能,至少在今天在 Web 应用程序的上下文中理解 MVC 模式的方式上(纯粹主义者可能会反对)。

本质上,您编写方法并将它们映射到特定路线,例如:

@app.route("/")
def hello():
    return "Hello World!"

如您所见,那里没有视图或模型。然而,它也是建立在 Jinja2 模板库之上的,所以在一个真实的应用程序中,你的方法(它作为一个控制器)看起来像:

@app.route("/")
def hello():
    return render_template('index.html', username="John Doe")

在这里,您使用index.html模板来呈现页面。这就是你现在的看法。

Flask 没有规定任何型号。你可以使用任何你想要的东西——从复杂的对象模型(通常使用像 SQLAlchemy 这样的 ORM)到满足你需要的最简单的东西。

你有它:MVC

于 2012-09-22T20:05:24.237 回答
1

从 MVC 的角度来看 Flask,我认为 Flask 为我们提供了实现自己的模型或视图的灵活性。但是对于 Controller 我们需要依赖 Flask 框架本身。

1.    @app.route("/")
2.    def hello():
2.1       # Code for your model here
2.2       # model code
3.        return render_template('index.html', username="John Doe")

在上面的代码中 -

  1. 第 1 行 - (由)控制器调用:是 Flask 控制器调用的内容,
  2. 第 2 行 - 模型:这是我们为定义模型编写自己的实现的地方,
  3. 第 3 行 - 视图:我们可以将视图编码为 index.html,使用 {{ }} 和 {% %} 编码,模型数据以 Dict 或用户对象的形式传递给视图。例如用户名="Xxx"
于 2021-06-07T19:40:13.593 回答
0

另外,看看这个。它是一个基于烧瓶的小型 MVC 结构项目,并且运行良好。

于 2022-02-21T07:10:42.897 回答