Django MVC模式用于非数据库驱动的模型?

26 投票
1 回答
9654 浏览
提问于 2025-04-15 13:40

我正在学习Django,感觉非常不错,但我遇到了一些问题,不太确定该怎么解决。

假设我有一个视图(View),它应该在某个复杂的Python对象更新时进行更新,但这个对象不是由数据库控制的,比如说它是通过AJAX调用或者直接由用户操作的。

那么,这段代码应该放在哪里呢?还应该放在models.py里面吗???

1 个回答

38

你的 models.py 文件可以是空的,甚至有时候就是空的。你并不一定要有一个和数据库对应的模型。

不过,还是建议你保留一个 models.py 文件,这样可以让 Django 的管理界面正常工作。这个文件的名字很重要,保持它为空文件比试图去改动其他管理命令所期待的文件要简单得多。

一般来说,“模型”并不一定要和数据库对应。在 MVC 设计中,“模型”可以是任何东西。

你可以定义自己的“模型”模块供视图使用。只要别叫它 models.py,因为那样会让 Django 的管理界面感到困惑。 给它起个对你应用有意义的名字,比如 foo.py。这个 foo.py 可以处理你应用背后的真实内容,而不一定是 Django 的 Model.model 子类。

Django 的 MVC 设计并不要求一定要有数据库映射。但它确实期望名为 models.py 的模块里有数据库映射。 所以,如果你没有实际的数据库映射,可以用一个空的 models.py

你的 views.py 可以使用

import foo

def index( request ):
    objects = foo.somelistofobjects()
    *etc.*

Django 让你可以轻松地在没有数据库映射的情况下工作。你的模型可以是任何东西。只要别叫它 models.py


编辑.

视图和模型是注册在一起的吗?不是。

当控制器更新模型时,视图会收到通知吗?不会。

模型严格来说就是数据的表示,这样算是 MVP 吗?是的。

去看看 Django 的文档吧。很简单。

网络请求 -> URL 映射 -> 视图函数 -> 模板 -> 响应。

模型可以被视图函数使用。模型可以是数据库映射,也可以是其他任何东西。

撰写回答