我们团队中最初教我们django(后来离开)的人使用了controller.py文件来执行帮助功能。许多这些函数与类直接相关。我更喜欢使用@staticmethod来容纳这些帮助者与他们相关的类。例如,而不是这样做:
# controllers.py
def process_entry():
# do some exciting stuff that might not have to do with an instance
这样称呼:
from myapp.controllers import process_entry
process_entry()
我更喜欢这个:
# models.py
class Entry(models.Model):
name = CharField...
# some other fields
@staticmethod
def process_entry():
# do some exciting stuff that might not have to do with an instance
这样称呼:
from myapp.models import Entry
Entry.process_entry()
是否有一种首选的,标准的方式来处理这种情况或仅仅是个人偏好?有没有其他人使用controllers.py文件?那里有什么?
感谢。
编辑:
可能是一个更好的例子,佣金。
# models.py
class Commission(models.Model):
check = ForeignKey
payment = ForeignKey
# other fields
class Check(models.Model):
# fields
class Payment(models.Model):
# fields
每当修改支票或付款实例时,对任何相关的佣金实例进行调整,或者在有人想要手动运行佣金的任何时候,他们都可以这样做。那么run_commissions()应该去哪里?我更喜欢这个,但显然这不应该封装在与数据相关的模型中吗?
# models.py
class Commission(models.Model):
check = ForeignKey
payment = ForeignKey
# other fields
@staticmethod
def run_commissions():
# do stuff
答案 0 :(得分:0)
静态方法用于在一个类中对相关函数进行分组(主要用于工厂方法),除此之外,静态方法和函数之间没有区别。
BUT。在您的示例中,您正在为DATABASE模型分配行为。 DATABASE模型不是LOGIC模型,您应该将它们与应用程序逻辑分开。无论如何,控制器在这个问题上也是一个坏名字。
我不确定 process_entry 是做什么的,但是如果它只改变一个Entry实体,那么它可以命名为:Entry.process(),但不是Entry作为DB模型!只是另一个入门课程。但是,如果该函数不仅仅是更改Entry,那么它不应该分配给Entry实体,而应该作为服务函数。