如何避免APIView Django Rest框架中的重复逻辑
我正在做一个api从一个网站捕获webhook,该网站要求你在调用webhook时使用的相同url内激活你的webhook。 我会有很多webhook,因此我会有很多重复的逻辑来激活webhook 如何使用Django Rest框架的APIView实现这一点如何避免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(
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函数,当然也可以向泛型视图添加任何其他重复的代码