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

时间:2018-03-24 00:08:13

标签: django django-rest-framework

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

如何使用Django Rest Framework的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

1 个答案:

答案 0 :(得分:3)

您可以使用包含验证码的函数创建一个泛型类,如下所示

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

这里仍然需要几行代码,但是这样你就可以一次更改每个子类视图的验证功能,当然也可以将任何其他重复的代码添加到通用视图中