diff options
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/authtoken/serializers.py | 2 | ||||
| -rw-r--r-- | rest_framework/authtoken/views.py | 3 | ||||
| -rw-r--r-- | rest_framework/renderers.py | 28 | ||||
| -rw-r--r-- | rest_framework/static/rest_framework/js/default.js | 4 | 
4 files changed, 31 insertions, 6 deletions
| diff --git a/rest_framework/authtoken/serializers.py b/rest_framework/authtoken/serializers.py index 37ade255..597aeed2 100644 --- a/rest_framework/authtoken/serializers.py +++ b/rest_framework/authtoken/serializers.py @@ -6,7 +6,7 @@ from rest_framework import exceptions, serializers  class AuthTokenSerializer(serializers.Serializer):      username = serializers.CharField() -    password = serializers.CharField() +    password = serializers.CharField(style={'input_type': 'password'})      def validate(self, attrs):          username = attrs.get('username') diff --git a/rest_framework/authtoken/views.py b/rest_framework/authtoken/views.py index b75c2e25..66bbc49b 100644 --- a/rest_framework/authtoken/views.py +++ b/rest_framework/authtoken/views.py @@ -11,9 +11,10 @@ class ObtainAuthToken(APIView):      permission_classes = ()      parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)      renderer_classes = (renderers.JSONRenderer,) +    serializer_class = AuthTokenSerializer      def post(self, request): -        serializer = AuthTokenSerializer(data=request.data) +        serializer = self.serializer_class(data=request.data)          serializer.is_valid(raise_exception=True)          user = serializer.validated_data['user']          token, created = Token.objects.get_or_create(user=user) diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index 920d2bc4..2350344c 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -421,6 +421,14 @@ class BrowsableAPIRenderer(BaseRenderer):              return False  # Doesn't have permissions          return True +    def _get_serializer(self, serializer_class, view_instance, request, *args, **kwargs): +        kwargs['context'] = { +            'request': request, +            'format': self.format, +            'view': view_instance +        } +        return serializer_class(*args, **kwargs) +      def get_rendered_html_form(self, data, view, method, request):          """          Return a string representing a rendered HTML form, possibly bound to @@ -457,8 +465,11 @@ class BrowsableAPIRenderer(BaseRenderer):              if method in ('DELETE', 'OPTIONS'):                  return True  # Don't actually need to return a form +            has_serializer = getattr(view, 'get_serializer', None) +            has_serializer_class = getattr(view, 'serializer_class', None) +              if ( -                not getattr(view, 'get_serializer', None) or +                (not has_serializer and not has_serializer_class) or                  not any(is_form_media_type(parser.media_type) for parser in view.parser_classes)              ):                  return @@ -466,10 +477,19 @@ class BrowsableAPIRenderer(BaseRenderer):              if existing_serializer is not None:                  serializer = existing_serializer              else: -                if method in ('PUT', 'PATCH'): -                    serializer = view.get_serializer(instance=instance, **kwargs) +                if has_serializer: +                    if method in ('PUT', 'PATCH'): +                        serializer = view.get_serializer(instance=instance, **kwargs) +                    else: +                        serializer = view.get_serializer(**kwargs)                  else: -                    serializer = view.get_serializer(**kwargs) +                    # at this point we must have a serializer_class +                    if method in ('PUT', 'PATCH'): +                        serializer = self._get_serializer(view.serializer_class, view, +                                                          request, instance=instance, **kwargs) +                    else: +                        serializer = self._get_serializer(view.serializer_class, view, +                                                          request, **kwargs)              if hasattr(serializer, 'initial_data'):                  serializer.is_valid() diff --git a/rest_framework/static/rest_framework/js/default.js b/rest_framework/static/rest_framework/js/default.js index c8812132..22e5efde 100644 --- a/rest_framework/static/rest_framework/js/default.js +++ b/rest_framework/static/rest_framework/js/default.js @@ -45,6 +45,10 @@ var selectedTab = null;  var selectedTabName = getCookie('tabstyle');  if (selectedTabName) { +    selectedTabName = selectedTabName.replace(/[^a-z-]/g, ''); +} + +if (selectedTabName) {      selectedTab = $('.form-switcher a[name=' + selectedTabName + ']');  } | 
