如何构建复杂的Django项目?

时间:2012-04-03 14:10:45

标签: python django

我有一个越来越复杂的Django项目。我开始使用传统文件:models,views和forms.py。我现在面临的问题是这些文件变得越来越大,我想把它们分成可管理的部分。有什么最好的做法?

另外,我想知道在Django中为类模型添加类方法是否是最佳实践?例如,我有一个投票类,我想在其上添加方法来获取特定用户,内容等的投票数量?

3 个答案:

答案 0 :(得分:2)

我发现重构确实有帮助。是否有很多类似的视图只有不同的模板或查询集?创建一个更通用的视图,接受多个模板名称,记录等。

任何需要大量计算的东西都会被移动到同一目录中的utils.py.

类方法适用于影响单个记录的操作;管理人员负责处理过滤记录或创建记录。

如果您已经采取了单独的modelsviews等文件夹并将视图和模型分解为单独文件的步骤,那么我建议您可以将它们分开应用。我更喜欢这个选项。

答案 1 :(得分:1)

我当然使用类方法,并且我发现在类上执行类似操作的地方,可以(并且很容易)将类方法分解为基类(使用您的self参数编写通用代码的类方法)。

管理分解视图等的最佳方法可能是用自己的包替换你想要分解的每个文件,并将你需要的任何内容(如果有的话)放入该包的__init__.py模块中。

答案 2 :(得分:1)

使用模型管理器与类方法。这样做,您的代码更容易让其他人阅读,您可以将这种代码与其他filter / select_related / order_by结合起来。下面是一个简单的例子,但随着逻辑变得越来越复杂,管理员为您的设置和非常少的代码做了很多补充,在您的应用程序中为您提供了很多良好的结缔组织。

我同意乔丹的说法,你可能需要不止一个应用程序,如果你现在有一个庞大的代码库,那么打破所有内容的界限应该更加明显。

class VoteManager(models.ModelManager):
    def by_user(self, user):
        return self.filter(user=user)
    def by_content(self, content)
        return self.filter(content=content)

class Vote(models.Model)
    user = models.ForeignKey(User)
    content = models.ForeignKey(Content)
    ...
    objects = VoteManager()