ソースを参照

fix(dyn): respond regardless of Accept header, and return text/plain

Peter Thomassen 6 年 前
コミット
35af1c1e1a
2 ファイル変更20 行追加3 行削除
  1. 17 0
      api/desecapi/renderers.py
  2. 3 3
      api/desecapi/views.py

+ 17 - 0
api/desecapi/renderers.py

@@ -0,0 +1,17 @@
+from rest_framework import renderers
+
+
+class PlainTextRenderer(renderers.BaseRenderer):
+    # Disregard Accept header
+    media_type = '*/*'
+    format = 'txt'
+
+    def render(self, data, media_type=None, renderer_context=None):
+        renderer_context = renderer_context or {}
+        response = renderer_context.get('response')
+
+        if response and response.exception:
+            response['Content-Type'] = 'text/plain'
+            return data['detail']
+
+        return data

+ 3 - 3
api/desecapi/views.py

@@ -11,7 +11,7 @@ from rest_framework.views import APIView
 from rest_framework.response import Response
 from rest_framework.reverse import reverse
 from rest_framework.authentication import get_authorization_header
-from rest_framework.renderers import StaticHTMLRenderer
+from desecapi.renderers import PlainTextRenderer
 from dns import resolver
 from django.template.loader import get_template
 import desecapi.authentication as auth
@@ -350,7 +350,7 @@ class DnsQuery(APIView):
 
 class DynDNS12Update(APIView):
     authentication_classes = (auth.TokenAuthentication, auth.BasicTokenAuthentication, auth.URLParamAuthentication,)
-    renderer_classes = [StaticHTMLRenderer]
+    renderer_classes = [PlainTextRenderer]
 
     def findDomain(self, request):
         def findDomainname(request):
@@ -439,7 +439,7 @@ class DynDNS12Update(APIView):
             domain=domain)
         domain.write_rrsets(rrsets)
 
-        return Response('good')
+        return Response('good', content_type='text/plain')
 
 class DonationList(generics.CreateAPIView):
     serializer_class = DonationSerializer