gpt4 book ai didi

django - django中业务逻辑放在哪里

转载 作者:行者123 更新时间:2023-12-03 14:11:56 30 4
gpt4 key购买 nike

例如,Account 1--> *User --> 1 Authentication
1 个帐户有多个用户,每个用户将有 1 个身份验证

我来自java背景所以我通常做的是

  • 将这些类定义为 java bean(即,只是 getter 和 setter,没有附加逻辑)
  • 创建 AccountManager ejb 类,定义 create_account 方法(需要 1 个帐户,用户列表)
  • 在 web 层准备数据,然后将数据传递到 AccountManager ejb,例如:accountManager.createAccount(account, userList)

  • 但是在 django 中,框架提倡将域逻辑放入模型类(行级)或关联的管理器类(表级)中,这使事情变得有些尴尬。是的,如果你的逻辑只涉及一张表是可以的,但是在实际应用中,通常每一步都会涉及到多个不同的表甚至数据库,那么这种情况我该怎么办呢?

    将逻辑放入 View 中?我认为这根本不是一个好习惯。甚至覆盖模型类中的保存方法,使用 **kwargs 传入额外的数据?然后后端将中断。

    我希望这能说明我对业务逻辑应该放在 django 应用程序中的什么位置的困惑。

    最佳答案

    不确定您是否阅读过关于 Managers 的部分在 Django 中,它似乎解决了你目前的情况。假设您有以下 Account模型定义,User是内置的。

    # accounts/models.py

    class AccountManager(models.Manager):
    def create_account(self, account, user_list):
    ...

    class Account(models.Model):
    objects = AccountManager()

    如果它变得太大,请随意将您的管理器代码分隔在一个单独的文件中。在您看来:
    # views.py

    from accounts.models import Account

    Account.objects.create_account(account, user_list)

    业务逻辑仍在模型中。

    编辑

    这里的关键字是覆盖,而不是覆盖。如果您覆盖模型的保存方法,您必须记住,您的 Web 应用程序和管理员中的任何创建、更新操作都将使用此新功能。如果您只希望这些业务逻辑在特定 View 中发生一次,最好将其排除在 save 之外。 .

    我想你可以把你的业务逻辑放在它自己的常规类中。每次需要运行业务逻辑时,都必须实例化该类。或者,如果您想跳过 OOP 方法,可以将您的业务逻辑作为静态函数放在这个新类中。

    关于django - django中业务逻辑放在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5616379/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com