Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我应该在Django中使用controllers.py还是@staticmethod?_Python_Django - Fatal编程技术网

Python 我应该在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

我们团队中最初教我们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 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!只是另一门入门课。然而,若该函数不仅仅是更改条目,那个么它不应该被分配给条目实体,而是作为一个服务函数