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

时间:2009-08-17 22:40:35

标签: python django model-view-controller models

我正在通过Django工作,到目前为止真的很喜欢它,但我有一个问题,我不确定解决它的典型方法。

假设我有一个View,当一些复杂的Python对象被更新时应该更新,但是这个对象不是由数据库驱动的,比如它是由AJAX调用驱动的,或者是由用户直接驱动的。

此代码在哪里?它还应该进入models.py ????

1 个答案:

答案 0 :(得分:36)

您的models.py可能(有时是)为空。您没有义务拥有映射到数据库的模型。

你仍然应该拥有一个models.py文件,以使Django的管理员满意。 models.py文件名很重要,拥有空文件比尝试更改各种管理命令所需的文件更容易。

“模型” - 通常 - 不必映射到数据库。 “模型” - 作为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文档。这很简单。

网络请求 - >网址映射 - >查看功能 - >模板 - >响应。

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