- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有 3 个相互关联的模型,具有一对多关系。
想法是,用户将创建模型 A 的实例(如股票投资组合),然后输入股票持有量(模型 C)。模型 B 适合的地方是我想根据投资组合(模型 A)中的股票(模型 C)运行计算/逻辑,并使用另一个类/模型来跟踪事情让生活更轻松,因此模型 B。
我最初在 Django View 中有这些计算的逻辑,但在 Two Scoops of Django 中读到业务逻辑应该与 View 分开。因此,我将逻辑移至模型 A(投资组合)的方法,现在从 View 中调用该方法。此逻辑循环遍历股票持有量并创建模型 B 的新实例,即结果。
我现在有兴趣探索 django-rest-framework 来为 javascript 前端(如 Angular)提供 API。我猜我将无法在我的 REST 界面中进行这种数据操作。但是,此逻辑的结果(模型 B 中的数据)需要通过 REST 可见。因此,这种计算/逻辑去哪里了?
最佳答案
Django Rest Framework 的主要部分是 View (ViewSets、ApiViews 等)和序列化器。这些都不是编写逻辑的理想场所。正如您提到的,在任何 View 中编写逻辑都不好。为什么?
恕我直言,模型不是编写逻辑的好地方。将模型视为您的数据库定义。我会让它们尽可能简单。您可以覆盖“保存”和其他方法来完成琐碎的任务。任何其他高级功能都应该存在于它之外。
我可以想到两个更好的地方来满足您的需求:
其中一个是 django signal
更好的是自定义类。在你自己的类中封装/解耦逻辑(你可以使用静态方法或实例方法,没关系),然后你将能够:
更新如何组织代码的示例。
From the comments it´s clear that a signal wouldn´t work because the analysis operation will run on user request. A signal would be useful if that operation should run automatically when saving an specific model.
I´m assuming you know how to use django-rest-framework api views orviewsets, serializers, etc. I you don´t how about that, better askanother question. This is going to be more a python explanation than anything else
在您的应用程序模块中,创建一个文件 app_business_logic.py
或您想要的任何名称。例如,您可以将它放在与 models.py 相同的级别,但这不是强制性的:
class HoldingsAnalyser:
# static method sample. Call it like this: "HoldingsAnalyser.run(..)"
@staticmethod
def run(holding_list):
# do your model generation here or whatever you need
return True # or whatever you need to return
# instance method sample. Create an instance first and then call the method:
# analyser = HoldingsAnalyser()
# analyser.run(...)
def run(self, holding_list):
# do your model generation here or whatever you need
return True # or whatever you need to return
现在,在 django-rest-framework api View 或 View 集中,创建一个 POST 方法,当客户端应用程序用户按下按钮(生成分析的按钮)时调用:
from yourapp.app_business_logic import HoldingsAnalyser
class StockPortfolioViewSet(WhatEverMixingYouNeedToInheritFrom):
serializer_class = whatever # look at the docs
@detail_route(methods=['post'])
def run_analysis(self, request, pk):
stock_portfolio = get the object based on the pk
holdings = make your query to get the holdings
analysis_result = HoldingsAnalyser.run(holdings)
if analysis_result:
# everything ok
return Response(status=status.HTTP_204_NO_CONTENT)
else:
return Response(a useful error for your client)
此 url 类似于 http://server.com/api_path/stockportfolio/21/run_analysis/
,其中 21 是 StockPortfolio 的 ID
关于python - Django Rest Framework 中模型方法中的业务逻辑在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35508064/
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
我在这里感觉有些不对劲,所以我希望社区提供意见 - 也许我以错误的方式处理这个问题...... 问:是否适合使用传统的基础架构日志框架(如 log4net)来记录业务事件? 当我说业务事件时,我的意思
技术也好,业务也罢; 01 【什么是业务?】 对于那些久经职场的人,也很难一句话说明白; 业务,作为工作中绝对的核心点,即便在一个公司待的足够久,
三天研发,两天设计; 01 【优先做设计方案】 职场中的那些魔幻操作,研发最烦的是哪个? 作为一个数年且资深的互联网普通开发,可以来说明一下为什么
业务、系统、接口(interface)、持久化类是什么意思?用一些例子解释一下? 最佳答案 业务可能是应用程序中所有功能部分发生的部分(即计算或规则) 系统是您的操作系统 接口(interface),
我无法创建带有指向移动应用的外部链接的简单广告。我已正确设置访问权限,可以创建广告系列、广告集、加载图像,但在创建广告期间出现错误: Ads and ad creatives must be asso
我是软件工程专业的学生,现在我正在为我的期末项目工作,安排在交易日进行商务配对。 这个想法是将卖家(开发人员)和买家(有经济能力的人)在一起。 算法应该像“快速约会”。 假设我有 15 张 table
我们只需按照以下说明在 AWS Cloudformation 上部署企业 WhatsApp API: AWS WhatsApp API 所以一切正常,部署正确完成,问题出在“SSL 配置”选项上,我们
我的应用因为以下原因被拒绝了 Guideline 3.2 - Business We found that your app is not appropriate for the App Store
您好,我想在我的网络应用程序中使用 WhatsApp 业务 API。我已经在 postman 中测试过了。 每当在 WhatsApp 选项卡下的 Facebook 业务页面中运行示例 curl 代码时
我是 Skype for Business 技术的新手,我正在尝试部署一个我愿意与 Skype WebSDK 和 AppSDK 一起使用的服务器。 起初我尝试使用Skype进行在线商务,但websdk
Apple 开发人员以此为由拒绝了我的应用。 “业务 - 3.1.1您的应用程序包含一个帐户注册功能,该功能被视为对外部机制的访问,以便在应用程序中使用购买或订阅。此功能不符合 App Store 审
我正在玩 Realm for Android。 我喜欢自动更新对象的想法,但我对它的软件架构有顾虑。 我已经看到许多提议的架构都指定了一个层来处理数据/数据库访问,理想情况下,更高层不会知道有关数据库
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 10 个月前。 Impro
我正在尝试设置 Whatsapp 业务 API。 引用Link用于设置。 我正在使用 Windows 10 操作系统。 -- 仅供引用。 在初始设置部分,使用命令 docker-compose up
我正在尝试使用 Facebook Business SDK 创建一个 facebook Adaccount .但是当我使用方法 createAdAccount 时,它会给我一个错误。请参阅下面的图片。
我想写一个概念证明 MonoMac使用 c# 和 Razor 呈现 html“ View ”的应用程序。 这可能吗? 如果没有,是否有人推荐与 Razor 的简单性相比的任何其他模板引擎。如果必须的话
无法解析 ':business:diary@debug/compileClasspath': Could not resolve project :fun:push. 的依赖关系 无法解析项目:fun
当我尝试在 Visual Studio Professional 2015 14.0.23107.0 中打开某些 XML 文件时,XML 编辑器出现白屏并显示以下文本: 为什么我不能编辑这个文件?此项
我是一名优秀的程序员,十分优秀!