瀏覽代碼

refactor(api): make DynDNS12UpdateView more idiomatic

Peter Thomassen 4 年之前
父節點
當前提交
9ea5f4bb7d
共有 2 個文件被更改,包括 7 次插入4 次删除
  1. 1 1
      api/desecapi/urls/version_1.py
  2. 6 3
      api/desecapi/views.py

+ 1 - 1
api/desecapi/urls/version_1.py

@@ -39,7 +39,7 @@ api_urls = [
     path('domains/<name>/rrsets/<subname>/<type>/', views.RRsetDetail.as_view()),
 
     # DynDNS update
-    path('dyndns/update', views.DynDNS12Update.as_view(), name='dyndns12update'),
+    path('dyndns/update', views.DynDNS12UpdateView.as_view(), name='dyndns12update'),
 
     # Serials
     path('serials/', views.SerialList.as_view(), name='serial'),

+ 6 - 3
api/desecapi/views.py

@@ -285,9 +285,10 @@ class Root(APIView):
         return Response(routes)
 
 
-class DynDNS12Update(generics.GenericAPIView):
+class DynDNS12UpdateView(generics.GenericAPIView):
     authentication_classes = (auth.TokenAuthentication, auth.BasicTokenAuthentication, auth.URLParamAuthentication,)
     renderer_classes = [PlainTextRenderer]
+    serializer_class = serializers.RRsetSerializer
     throttle_scope = 'dyndns'
 
     def _find_ip(self, params, version):
@@ -367,6 +368,9 @@ class DynDNS12Update(generics.GenericAPIView):
     def subname(self):
         return self.qname.rpartition(f'.{self.domain.name}')[0]
 
+    def get_serializer_context(self):
+        return {**super().get_serializer_context(), 'domain': self.domain, 'minimum_ttl': 60}
+
     def get_queryset(self):
         return self.domain.rrset_set.filter(subname=self.subname, type__in=['A', 'AAAA'])
 
@@ -381,8 +385,7 @@ class DynDNS12Update(generics.GenericAPIView):
             {'type': 'AAAA', 'subname': self.subname, 'ttl': 60, 'records': [ipv6] if ipv6 else []},
         ]
 
-        context = {'domain': self.domain, 'minimum_ttl': 60}
-        serializer = serializers.RRsetSerializer(instances, data=data, many=True, partial=True, context=context)
+        serializer = self.get_serializer(instances, data=data, many=True, partial=True)
         try:
             serializer.is_valid(raise_exception=True)
         except ValidationError as e: