应用逻辑在视图代码中

时间:2011-10-28 23:27:06

标签: django

2 个答案:

答案 0 :(得分:6)

当我开始使用django时,我发现很难弄清楚一切都在哪里。这实际上取决于你所写的逻辑类型。

首先从模型开始:模型方法和管理器是执行行级逻辑和表级逻辑的好地方,即模型管理器是编写代码以获取与之关联的类别列表的好地方。所有的博文。模型方法是计算特定博客帖子中字符的好地方。

视图级别逻辑应该处理所有这些 - 接收请求,执行必要的步骤以获得所需的结果(可能使用模型管理器),然后为模板做好准备。

如果存在不适合其他地方的代码,但是具有逻辑结构,则可以简单地编写一个模块来执行该操作。类似地,如果存在您认为不属于的代码片段,请保留utils.py来保存它们。

您不应该在模板中真正执行任何逻辑 - 如果必须,请使用模板标记。这些对于使用您在每个请求周期中都不需要的可重用代码片段以及单个请求周期都很有用 - 您可能希望它们在子集中(即在您的网站的博客部分显示类别列表)

如果您确实希望在每个请求周期中执行某些逻辑,请使用上下文处理器或中间件。如果您希望仅在一个请求周期中执行某些逻辑,则视图可能就是该位置。

TLDR :在您的视图中编写逻辑很好,但有很多地方可能更合适

答案 1 :(得分:2)

将注册码分成它自己的功能,使测试更容易是一个很好的理由。如果您允许管理员在单独的私有视图中注册用户,那么注册功能将更加干燥。就个人而言,我认为代码中的一点应用程序逻辑不会造成太大的伤害。

你可能会发现在django-registration应用程序中查看注册视图是有益的 - 只是为了看看它是如何编写的,我不是说你应该或必须使用它。它已将用户注册封装到它自己的函数中(还有一个间接级别,因为注册后端是可插入的。)