如何避免APIView Django Rest框架中的重复逻辑

如何避免APIView Django Rest框架中的重复逻辑,django,django-rest-framework,Django,Django Rest Framework,我正在做一个api从一个网站捕获webhook,该网站要求你在调用webhook时使用的相同url内激活你的webhook。 我会有很多webhook,因此我会有很多重复的逻辑来激活webhook 如何使用Django Rest框架的APIView实现这一点 class MyWebhookView(APIView): def post(self, request): data = request.data # repeated logic if data.get(

我正在做一个api从一个网站捕获webhook,该网站要求你在调用webhook时使用的相同url内激活你的webhook。 我会有很多webhook,因此我会有很多重复的逻辑来激活webhook

如何使用Django Rest框架的APIView实现这一点

class MyWebhookView(APIView):
  def post(self, request):  
    data = request.data
    # repeated logic
    if data.get('type') == constants.WEBHOOK_VERIFY:
      hook = Hook(ID, TOKEN)
      code = hook.validate(data.get('hook_id'), data.get('code'))
      return Response({'code': code})

   # custom logic

您可以创建一个带有function的泛型类,其中包含如下验证代码

class GenericWebhookView(APIView):

  def verify(self, data):  

      if data.get('type') == constants.WEBHOOK_VERIFY:
          hook = Hook(ID, TOKEN)
          code = hook.validate(data.get('hook_id'), data.get('code'))
          return code

      return None
class SomeOtherWebhookView(GenericWebhookView):

    def post(self, request):

        code = self.verify(request.data)

        if code:
            return Response({'code': code})

        # custom code
然后,当您创建一个新视图时,您可以将其子类化,并像这样使用函数

class GenericWebhookView(APIView):

  def verify(self, data):  

      if data.get('type') == constants.WEBHOOK_VERIFY:
          hook = Hook(ID, TOKEN)
          code = hook.validate(data.get('hook_id'), data.get('code'))
          return code

      return None
class SomeOtherWebhookView(GenericWebhookView):

    def post(self, request):

        code = self.verify(request.data)

        if code:
            return Response({'code': code})

        # custom code
这里仍然需要几行代码,但是通过这种方式,您可以一次更改每个子类视图的verify函数,当然也可以向泛型视图添加任何其他重复的代码