Python 我应该在Django中使用controllers.py还是@staticmethod?
我们团队中最初教我们django(后来离开)的人使用controllers.py文件实现助手函数。这些函数中有很多与类直接相关。我更喜欢使用@staticmethod来为这些助手提供与其相关的类。例如,与其这样做,不如:Python 我应该在Django中使用controllers.py还是@staticmethod?,python,django,Python,Django,我们团队中最初教我们django(后来离开)的人使用controllers.py文件实现助手函数。这些函数中有很多与类直接相关。我更喜欢使用@staticmethod来为这些助手提供与其相关的类。例如,与其这样做,不如: # controllers.py def process_entry(): # do some exciting stuff that might not have to do with an instance 这样称呼: from myapp.controllers
# 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
无论何时修改支票或付款实例,以对任何相关佣金实例进行调整,或任何时候有人想要手动运行佣金,他们都可以这样做。那么我们应该去哪里呢?我更喜欢这样,但显然这不应该封装在数据相关模型中
# models.py
class Commission(models.Model):
check = ForeignKey
payment = ForeignKey
# other fields
@staticmethod
def run_commissions():
# do stuff
静态方法用于将相关函数分组到一个类中(主要用于工厂方法),此外,静态方法和函数之间没有区别 但是。在您的示例中,将行为指定给数据库模型。数据库模型不是逻辑模型,您应该将它们与应用程序逻辑分开。无论如何,控制器在这方面也是个坏名声 我不确定process_entry做什么,但如果它只更改一个条目实体,那么它可以命名为:entry.process(),但不能命名为entry as DB model!只是另一门入门课。然而,若该函数不仅仅是更改条目,那个么它不应该被分配给条目实体,而是作为一个服务函数