如何构建复杂的Django项目?

2024-05-15 18:03:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Django项目变得越来越复杂。我从传统文件开始:模型、视图和表单.py. 我现在的问题是这些文件越来越大,我想把它们分成可管理的部分。关于这一点的最佳实践是什么?在

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


Tags: 文件项目django方法用户py模型视图
3条回答

关于使用模型管理器与类方法。这样做,你的代码更容易被别人阅读,你可以将这类代码与其他过滤/选择相关/排序依据相结合。下面是一个简单的例子,但是随着逻辑变得越来越复杂,管理者会对你的设置做一个很好的补充,并且只需要很少的代码,在你的应用程序中给你很多良好的结缔组织。在

我同意Jordan的观点,你可能需要不止一个应用程序,如果你现在有一个庞大的代码库,那么分解所有东西的代码行应该更明显。在

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()

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

任何需要大量计算的内容都会转移到实用工具.py在同一个目录中。在

类方法用于影响单个记录的操作;管理器用于处理筛选记录或创建记录。在

如果您已经开始创建单独的modelsviews等文件夹,并将视图和模型拆分为单独的文件,那么我认为您可以将它们分离到单独的应用程序中。我更喜欢这样做。在

我当然使用类方法,并且我发现在有类似的操作要在类上执行的地方,将类方法分解成基类是可能的(而且很容易)(使用类方法的self参数来编写泛型代码)。在

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

相关问题 更多 >