首页 > 解决方案 > 我有 2 个具有相同发布方法的视图,保持 DRY 的最佳方法是什么

问题描述

我有一个房地产网站,有 2 个单独页面的 2 个视图。每个页面都有一个表格,允许您编辑交易详情。其中一个页面还允许您执行其他需要 post 方法的事情。

所以视图基本上是这样的:

class ViewOne(ListView):
    # ...
    def post(self, request, *args, **kwargs):
        # update transaction logic


class ViewTwo(ListView):
    # ...
    def post(self, request, *args, **kwargs):
        # update transaction logic
        # additional post logic

在不编写重复代码的情况下添加更新事务到每个视图的发布逻辑的最佳方法是什么?

标签: djangodjango-views

解决方案


这个问题可以通过使用 Mixin 来解决。

mixin 是一个类,它定义和实现了一个单一的、明确定义的特性。从 mixin 继承的子类继承了这个特性——仅此而已。

class TransactionLogicMixin:
    def update_transaction(self):
        # your transaction code goes here.
        

class ViewOne(ListView,TransactionLogicMixin):
    # ...
    def post(self, request, *args, **kwargs):
        # update transaction logic
        self.update_transaction()


class ViewTwo(ListView,TransactionLogicMixin):
    # ...
    def post(self, request, *args, **kwargs):
        # update transaction logic
        self.update_transaction()
        # additional post logic

推荐阅读