class RetrieveUpdateAPIView
from rest_framework.generics import RetrieveUpdateAPIView
    Concrete view for retrieving, updating a model instance.
    
    
            Ancestors (MRO)
- RetrieveUpdateAPIView
 - RetrieveModelMixin
 - UpdateModelMixin
 - GenericAPIView
 - APIView
 - View
 
Attributes
| Defined in | |
|---|---|
                                    
                                        allowed_methods = <property object at 0x7fc91c508770>
                                    
                                 | 
                                APIView | 
                                    
                                        authentication_classes = [<class 'rest_framework.authentication.SessionAuthentication'>, <class 'rest_framework.authentication.BasicAuthentication'>]
                                    
                                 | 
                                APIView | 
                                    
                                        content_negotiation_class = <class 'rest_framework.negotiation.DefaultContentNegotiation'>
                                    
                                 | 
                                APIView | 
                                    
                                        default_response_headers = <property object at 0x7fc91c5092b0>
                                    
                                 | 
                                APIView | 
                                    
                                        filter_backends = []
                                    
                                 | 
                                GenericAPIView | 
                                    
                                        http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
                                    
                                 | 
                                View | 
                                    
                                        lookup_field = 'pk'
                                    
                                 | 
                                GenericAPIView | 
                                    
                                        lookup_url_kwarg = None
                                    
                                 | 
                                GenericAPIView | 
                                    
                                        metadata_class = <class 'rest_framework.metadata.SimpleMetadata'>
                                    
                                 | 
                                APIView | 
                                    
                                        pagination_class = None
                                    
                                 | 
                                GenericAPIView | 
                                    
                                        paginator = <property object at 0x7fc91c87fbf0>
                                    
                                 | 
                                GenericAPIView | 
                                    
                                        parser_classes = [<class 'rest_framework.parsers.JSONParser'>, <class 'rest_framework.parsers.FormParser'>, <class 'rest_framework.parsers.MultiPartParser'>]
                                    
                                 | 
                                APIView | 
                                    
                                        permission_classes = [<class 'rest_framework.permissions.AllowAny'>]
                                    
                                 | 
                                APIView | 
                                    
                                        queryset = None
                                    
                                 | 
                                GenericAPIView | 
                                    
                                        renderer_classes = [<class 'rest_framework.renderers.JSONRenderer'>, <class 'rest_framework.renderers.BrowsableAPIRenderer'>]
                                    
                                 | 
                                APIView | 
                                    
                                        schema = <rest_framework.schemas.openapi.AutoSchema object at 0x7fc91c33ae60>
                                    
                                 | 
                                APIView | 
                                    
                                        serializer_class = None
                                    
                                 | 
                                GenericAPIView | 
                                    
                                        settings = <rest_framework.settings.APISettings object at 0x7fc91c7a8dc0>
                                    
                                 | 
                                APIView | 
                                    
                                        throttle_classes = []
                                    
                                 | 
                                APIView | 
                                    
                                        versioning_class = None
                                    
                                 | 
                                APIView | 
Methods
                                
                                    def
                                    _allowed_methods(self):
                                
                                 ¶
                                
                                    View
                                
                            
                            def _allowed_methods(self):
        return [m.upper() for m in self.http_method_names if hasattr(self, m)]
                                
                                    def
                                    as_view(cls, **initkwargs):
                                
                                 ¶
                                
                            
                        APIView
        Store the original class on the view function.
        This allows us to discover information about the view when we do URL
        reverse lookups.  Used for breadcrumb generation.
        
                                                    @classmethod
    def as_view(cls, **initkwargs):
        """
        Store the original class on the view function.
        This allows us to discover information about the view when we do URL
        reverse lookups.  Used for breadcrumb generation.
        """
        if isinstance(getattr(cls, 'queryset', None), models.query.QuerySet):
            def force_evaluation():
                raise RuntimeError(
                    'Do not evaluate the `.queryset` attribute directly, '
                    'as the result will be cached and reused between requests. '
                    'Use `.all()` or call `.get_queryset()` instead.'
                )
            cls.queryset._fetch_all = force_evaluation
        view = super().as_view(**initkwargs)
        view.cls = cls
        view.initkwargs = initkwargs
        # Note: session based authentication is explicitly CSRF validated,
        # all other authentication is CSRF exempt.
        return csrf_exempt(view)
View
Main entry point for a request-response process.
    @classonlymethod
    def as_view(cls, **initkwargs):
        """Main entry point for a request-response process."""
        for key in initkwargs:
            if key in cls.http_method_names:
                raise TypeError(
                    'The method name %s is not accepted as a keyword argument '
                    'to %s().' % (key, cls.__name__)
                )
            if not hasattr(cls, key):
                raise TypeError("%s() received an invalid keyword %r. as_view "
                                "only accepts arguments that are already "
                                "attributes of the class." % (cls.__name__, key))
        def view(request, *args, **kwargs):
            self = cls(**initkwargs)
            self.setup(request, *args, **kwargs)
            if not hasattr(self, 'request'):
                raise AttributeError(
                    "%s instance has no 'request' attribute. Did you override "
                    "setup() and forget to call super()?" % cls.__name__
                )
            return self.dispatch(request, *args, **kwargs)
        view.view_class = cls
        view.view_initkwargs = initkwargs
        # take name and docstring from class
        update_wrapper(view, cls, updated=())
        # and possible attributes set by decorators
        # like csrf_exempt from dispatch
        update_wrapper(view, cls.dispatch, assigned=())
        return view
                                
                                    def
                                    check_object_permissions(self, request, obj):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Check if the request should be permitted for a given object.
        Raises an appropriate exception if the request is not permitted.
        
                                                    def check_object_permissions(self, request, obj):
        """
        Check if the request should be permitted for a given object.
        Raises an appropriate exception if the request is not permitted.
        """
        for permission in self.get_permissions():
            if not permission.has_object_permission(request, self, obj):
                self.permission_denied(
                    request, message=getattr(permission, 'message', None)
                )
                                
                                    def
                                    check_permissions(self, request):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Check if the request should be permitted.
        Raises an appropriate exception if the request is not permitted.
        
                                                    def check_permissions(self, request):
        """
        Check if the request should be permitted.
        Raises an appropriate exception if the request is not permitted.
        """
        for permission in self.get_permissions():
            if not permission.has_permission(request, self):
                self.permission_denied(
                    request, message=getattr(permission, 'message', None)
                )
                                
                                    def
                                    check_throttles(self, request):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Check if request should be throttled.
        Raises an appropriate exception if the request is throttled.
        
                                                    def check_throttles(self, request):
        """
        Check if request should be throttled.
        Raises an appropriate exception if the request is throttled.
        """
        throttle_durations = []
        for throttle in self.get_throttles():
            if not throttle.allow_request(request, self):
                throttle_durations.append(throttle.wait())
        if throttle_durations:
            # Filter out `None` values which may happen in case of config / rate
            # changes, see #1438
            durations = [
                duration for duration in throttle_durations
                if duration is not None
            ]
            duration = max(durations, default=None)
            self.throttled(request, duration)
                                
                                    def
                                    determine_version(self, request, *args, **kwargs):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        If versioning is being used, then determine any API version for the
        incoming request. Returns a two-tuple of (version, versioning_scheme)
        
                                                    def determine_version(self, request, *args, **kwargs):
        """
        If versioning is being used, then determine any API version for the
        incoming request. Returns a two-tuple of (version, versioning_scheme)
        """
        if self.versioning_class is None:
            return (None, None)
        scheme = self.versioning_class()
        return (scheme.determine_version(request, *args, **kwargs), scheme)
                                
                                    def
                                    dispatch(self, request, *args, **kwargs):
                                
                                 ¶
                                
                            
                        APIView
        `.dispatch()` is pretty much the same as Django's regular dispatch,
        but with extra hooks for startup, finalize, and exception handling.
        
                                                    def dispatch(self, request, *args, **kwargs):
        """
        `.dispatch()` is pretty much the same as Django's regular dispatch,
        but with extra hooks for startup, finalize, and exception handling.
        """
        self.args = args
        self.kwargs = kwargs
        request = self.initialize_request(request, *args, **kwargs)
        self.request = request
        self.headers = self.default_response_headers  # deprecate?
        try:
            self.initial(request, *args, **kwargs)
            # Get the appropriate handler method
            if request.method.lower() in self.http_method_names:
                handler = getattr(self, request.method.lower(),
                                  self.http_method_not_allowed)
            else:
                handler = self.http_method_not_allowed
            response = handler(request, *args, **kwargs)
        except Exception as exc:
            response = self.handle_exception(exc)
        self.response = self.finalize_response(request, response, *args, **kwargs)
        return self.response
View
    def dispatch(self, request, *args, **kwargs):
        # Try to dispatch to the right method; if a method doesn't exist,
        # defer to the error handler. Also defer to the error handler if the
        # request method isn't on the approved list.
        if request.method.lower() in self.http_method_names:
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        return handler(request, *args, **kwargs)
                                
                                    def
                                    filter_queryset(self, queryset):
                                
                                 ¶
                                
                                    GenericAPIView
                                
                            
                        
        Given a queryset, filter it with whichever filter backend is in use.
        You are unlikely to want to override this method, although you may need
        to call it either from a list view, or from a custom `get_object`
        method if you want to apply the configured filtering backend to the
        default queryset.
        
                                                    def filter_queryset(self, queryset):
        """
        Given a queryset, filter it with whichever filter backend is in use.
        You are unlikely to want to override this method, although you may need
        to call it either from a list view, or from a custom `get_object`
        method if you want to apply the configured filtering backend to the
        default queryset.
        """
        for backend in list(self.filter_backends):
            queryset = backend().filter_queryset(self.request, queryset, self)
        return queryset
                                
                                    def
                                    finalize_response(self, request, response, *args, **kwargs):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Returns the final response object.
        
                                                    def finalize_response(self, request, response, *args, **kwargs):
        """
        Returns the final response object.
        """
        # Make the error obvious if a proper response is not returned
        assert isinstance(response, HttpResponseBase), (
            'Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` '
            'to be returned from the view, but received a `%s`'
            % type(response)
        )
        if isinstance(response, Response):
            if not getattr(request, 'accepted_renderer', None):
                neg = self.perform_content_negotiation(request, force=True)
                request.accepted_renderer, request.accepted_media_type = neg
            response.accepted_renderer = request.accepted_renderer
            response.accepted_media_type = request.accepted_media_type
            response.renderer_context = self.get_renderer_context()
        # Add new vary headers to the response instead of overwriting.
        vary_headers = self.headers.pop('Vary', None)
        if vary_headers is not None:
            patch_vary_headers(response, cc_delim_re.split(vary_headers))
        for key, value in self.headers.items():
            response[key] = value
        return response
                                
                                    def
                                    get(self, request, *args, **kwargs):
                                
                                 ¶
                                
                                    RetrieveUpdateAPIView
                                
                            
                            def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)
                                
                                    def
                                    get_authenticate_header(self, request):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        If a request is unauthenticated, determine the WWW-Authenticate
        header to use for 401 responses, if any.
        
                                                    def get_authenticate_header(self, request):
        """
        If a request is unauthenticated, determine the WWW-Authenticate
        header to use for 401 responses, if any.
        """
        authenticators = self.get_authenticators()
        if authenticators:
            return authenticators[0].authenticate_header(request)
                                
                                    def
                                    get_authenticators(self):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Instantiates and returns the list of authenticators that this view can use.
        
                                                    def get_authenticators(self):
        """
        Instantiates and returns the list of authenticators that this view can use.
        """
        return [auth() for auth in self.authentication_classes]
                                
                                    def
                                    get_content_negotiator(self):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Instantiate and return the content negotiation class to use.
        
                                                    def get_content_negotiator(self):
        """
        Instantiate and return the content negotiation class to use.
        """
        if not getattr(self, '_negotiator', None):
            self._negotiator = self.content_negotiation_class()
        return self._negotiator
                                
                                    def
                                    get_exception_handler(self):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Returns the exception handler that this view uses.
        
                                                    def get_exception_handler(self):
        """
        Returns the exception handler that this view uses.
        """
        return self.settings.EXCEPTION_HANDLER
                                
                                    def
                                    get_exception_handler_context(self):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Returns a dict that is passed through to EXCEPTION_HANDLER,
        as the `context` argument.
        
                                                    def get_exception_handler_context(self):
        """
        Returns a dict that is passed through to EXCEPTION_HANDLER,
        as the `context` argument.
        """
        return {
            'view': self,
            'args': getattr(self, 'args', ()),
            'kwargs': getattr(self, 'kwargs', {}),
            'request': getattr(self, 'request', None)
        }
                                
                                    def
                                    get_format_suffix(self, **kwargs):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Determine if the request includes a '.json' style format suffix
        
                                                    def get_format_suffix(self, **kwargs):
        """
        Determine if the request includes a '.json' style format suffix
        """
        if self.settings.FORMAT_SUFFIX_KWARG:
            return kwargs.get(self.settings.FORMAT_SUFFIX_KWARG)
                                
                                    def
                                    get_object(self):
                                
                                 ¶
                                
                                    GenericAPIView
                                
                            
                        
        Returns the object the view is displaying.
        You may want to override this if you need to provide non-standard
        queryset lookups.  Eg if objects are referenced using multiple
        keyword arguments in the url conf.
        
                                                    def get_object(self):
        """
        Returns the object the view is displaying.
        You may want to override this if you need to provide non-standard
        queryset lookups.  Eg if objects are referenced using multiple
        keyword arguments in the url conf.
        """
        queryset = self.filter_queryset(self.get_queryset())
        # Perform the lookup filtering.
        lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field
        assert lookup_url_kwarg in self.kwargs, (
            'Expected view %s to be called with a URL keyword argument '
            'named "%s". Fix your URL conf, or set the `.lookup_field` '
            'attribute on the view correctly.' %
            (self.__class__.__name__, lookup_url_kwarg)
        )
        filter_kwargs = {self.lookup_field: self.kwargs[lookup_url_kwarg]}
        obj = get_object_or_404(queryset, **filter_kwargs)
        # May raise a permission denied
        self.check_object_permissions(self.request, obj)
        return obj
                                
                                    def
                                    get_paginated_response(self, data):
                                
                                 ¶
                                
                                    GenericAPIView
                                
                            
                        
        Return a paginated style `Response` object for the given output data.
        
                                                    def get_paginated_response(self, data):
        """
        Return a paginated style `Response` object for the given output data.
        """
        assert self.paginator is not None
        return self.paginator.get_paginated_response(data)
                                
                                    def
                                    get_parser_context(self, http_request):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Returns a dict that is passed through to Parser.parse(),
        as the `parser_context` keyword argument.
        
                                                    def get_parser_context(self, http_request):
        """
        Returns a dict that is passed through to Parser.parse(),
        as the `parser_context` keyword argument.
        """
        # Note: Additionally `request` and `encoding` will also be added
        #       to the context by the Request object.
        return {
            'view': self,
            'args': getattr(self, 'args', ()),
            'kwargs': getattr(self, 'kwargs', {})
        }
                                
                                    def
                                    get_parsers(self):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Instantiates and returns the list of parsers that this view can use.
        
                                                    def get_parsers(self):
        """
        Instantiates and returns the list of parsers that this view can use.
        """
        return [parser() for parser in self.parser_classes]
                                
                                    def
                                    get_permissions(self):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Instantiates and returns the list of permissions that this view requires.
        
                                                    def get_permissions(self):
        """
        Instantiates and returns the list of permissions that this view requires.
        """
        return [permission() for permission in self.permission_classes]
                                
                                    def
                                    get_queryset(self):
                                
                                 ¶
                                
                                    GenericAPIView
                                
                            
                        
        Get the list of items for this view.
        This must be an iterable, and may be a queryset.
        Defaults to using `self.queryset`.
        This method should always be used rather than accessing `self.queryset`
        directly, as `self.queryset` gets evaluated only once, and those results
        are cached for all subsequent requests.
        You may want to override this if you need to provide different
        querysets depending on the incoming request.
        (Eg. return a list of items that is specific to the user)
        
                                                    def get_queryset(self):
        """
        Get the list of items for this view.
        This must be an iterable, and may be a queryset.
        Defaults to using `self.queryset`.
        This method should always be used rather than accessing `self.queryset`
        directly, as `self.queryset` gets evaluated only once, and those results
        are cached for all subsequent requests.
        You may want to override this if you need to provide different
        querysets depending on the incoming request.
        (Eg. return a list of items that is specific to the user)
        """
        assert self.queryset is not None, (
            "'%s' should either include a `queryset` attribute, "
            "or override the `get_queryset()` method."
            % self.__class__.__name__
        )
        queryset = self.queryset
        if isinstance(queryset, QuerySet):
            # Ensure queryset is re-evaluated on each request.
            queryset = queryset.all()
        return queryset
                                
                                    def
                                    get_renderer_context(self):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Returns a dict that is passed through to Renderer.render(),
        as the `renderer_context` keyword argument.
        
                                                    def get_renderer_context(self):
        """
        Returns a dict that is passed through to Renderer.render(),
        as the `renderer_context` keyword argument.
        """
        # Note: Additionally 'response' will also be added to the context,
        #       by the Response object.
        return {
            'view': self,
            'args': getattr(self, 'args', ()),
            'kwargs': getattr(self, 'kwargs', {}),
            'request': getattr(self, 'request', None)
        }
                                
                                    def
                                    get_renderers(self):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Instantiates and returns the list of renderers that this view can use.
        
                                                    def get_renderers(self):
        """
        Instantiates and returns the list of renderers that this view can use.
        """
        return [renderer() for renderer in self.renderer_classes]
                                
                                    def
                                    get_serializer(self, *args, **kwargs):
                                
                                 ¶
                                
                                    GenericAPIView
                                
                            
                        
        Return the serializer instance that should be used for validating and
        deserializing input, and for serializing output.
        
                                                    def get_serializer(self, *args, **kwargs):
        """
        Return the serializer instance that should be used for validating and
        deserializing input, and for serializing output.
        """
        serializer_class = self.get_serializer_class()
        kwargs['context'] = self.get_serializer_context()
        return serializer_class(*args, **kwargs)
                                
                                    def
                                    get_serializer_class(self):
                                
                                 ¶
                                
                                    GenericAPIView
                                
                            
                        
        Return the class to use for the serializer.
        Defaults to using `self.serializer_class`.
        You may want to override this if you need to provide different
        serializations depending on the incoming request.
        (Eg. admins get full serialization, others get basic serialization)
        
                                                    def get_serializer_class(self):
        """
        Return the class to use for the serializer.
        Defaults to using `self.serializer_class`.
        You may want to override this if you need to provide different
        serializations depending on the incoming request.
        (Eg. admins get full serialization, others get basic serialization)
        """
        assert self.serializer_class is not None, (
            "'%s' should either include a `serializer_class` attribute, "
            "or override the `get_serializer_class()` method."
            % self.__class__.__name__
        )
        return self.serializer_class
                                
                                    def
                                    get_serializer_context(self):
                                
                                 ¶
                                
                                    GenericAPIView
                                
                            
                        
        Extra context provided to the serializer class.
        
                                                    def get_serializer_context(self):
        """
        Extra context provided to the serializer class.
        """
        return {
            'request': self.request,
            'format': self.format_kwarg,
            'view': self
        }
                                
                                    def
                                    get_throttles(self):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Instantiates and returns the list of throttles that this view uses.
        
                                                    def get_throttles(self):
        """
        Instantiates and returns the list of throttles that this view uses.
        """
        return [throttle() for throttle in self.throttle_classes]
                                
                                    def
                                    get_view_description(self, html=False):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Return some descriptive text for the view, as used in OPTIONS responses
        and in the browsable API.
        
                                                    def get_view_description(self, html=False):
        """
        Return some descriptive text for the view, as used in OPTIONS responses
        and in the browsable API.
        """
        func = self.settings.VIEW_DESCRIPTION_FUNCTION
        return func(self, html)
                                
                                    def
                                    get_view_name(self):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Return the view name, as used in OPTIONS responses and in the
        browsable API.
        
                                                    def get_view_name(self):
        """
        Return the view name, as used in OPTIONS responses and in the
        browsable API.
        """
        func = self.settings.VIEW_NAME_FUNCTION
        return func(self)
                                
                                    def
                                    handle_exception(self, exc):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Handle any exception that occurs, by returning an appropriate response,
        or re-raising the error.
        
                                                    def handle_exception(self, exc):
        """
        Handle any exception that occurs, by returning an appropriate response,
        or re-raising the error.
        """
        if isinstance(exc, (exceptions.NotAuthenticated,
                            exceptions.AuthenticationFailed)):
            # WWW-Authenticate header for 401 responses, else coerce to 403
            auth_header = self.get_authenticate_header(self.request)
            if auth_header:
                exc.auth_header = auth_header
            else:
                exc.status_code = status.HTTP_403_FORBIDDEN
        exception_handler = self.get_exception_handler()
        context = self.get_exception_handler_context()
        response = exception_handler(exc, context)
        if response is None:
            self.raise_uncaught_exception(exc)
        response.exception = True
        return response
                                
                                    def
                                    http_method_not_allowed(self, request, *args, **kwargs):
                                
                                 ¶
                                
                            
                        APIView
        If `request.method` does not correspond to a handler method,
        determine what kind of exception to raise.
        
                                                    def http_method_not_allowed(self, request, *args, **kwargs):
        """
        If `request.method` does not correspond to a handler method,
        determine what kind of exception to raise.
        """
        raise exceptions.MethodNotAllowed(request.method)
View
    def http_method_not_allowed(self, request, *args, **kwargs):
        logger.warning(
            'Method Not Allowed (%s): %s', request.method, request.path,
            extra={'status_code': 405, 'request': request}
        )
        return HttpResponseNotAllowed(self._allowed_methods())
                                
                                    def
                                    initial(self, request, *args, **kwargs):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Runs anything that needs to occur prior to calling the method handler.
        
                                                    def initial(self, request, *args, **kwargs):
        """
        Runs anything that needs to occur prior to calling the method handler.
        """
        self.format_kwarg = self.get_format_suffix(**kwargs)
        # Perform content negotiation and store the accepted info on the request
        neg = self.perform_content_negotiation(request)
        request.accepted_renderer, request.accepted_media_type = neg
        # Determine the API version, if versioning is in use.
        version, scheme = self.determine_version(request, *args, **kwargs)
        request.version, request.versioning_scheme = version, scheme
        # Ensure that the incoming request is permitted
        self.perform_authentication(request)
        self.check_permissions(request)
        self.check_throttles(request)
                                
                                    def
                                    initialize_request(self, request, *args, **kwargs):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Returns the initial request object.
        
                                                    def initialize_request(self, request, *args, **kwargs):
        """
        Returns the initial request object.
        """
        parser_context = self.get_parser_context(request)
        return Request(
            request,
            parsers=self.get_parsers(),
            authenticators=self.get_authenticators(),
            negotiator=self.get_content_negotiator(),
            parser_context=parser_context
        )
                                
                                    def
                                    options(self, request, *args, **kwargs):
                                
                                 ¶
                                
                            
                        APIView
        Handler method for HTTP 'OPTIONS' request.
        
                                                    def options(self, request, *args, **kwargs):
        """
        Handler method for HTTP 'OPTIONS' request.
        """
        if self.metadata_class is None:
            return self.http_method_not_allowed(request, *args, **kwargs)
        data = self.metadata_class().determine_metadata(request, self)
        return Response(data, status=status.HTTP_200_OK)
View
Handle responding to requests for the OPTIONS HTTP verb.
    def options(self, request, *args, **kwargs):
        """Handle responding to requests for the OPTIONS HTTP verb."""
        response = HttpResponse()
        response.headers['Allow'] = ', '.join(self._allowed_methods())
        response.headers['Content-Length'] = '0'
        return response
                                
                                    def
                                    paginate_queryset(self, queryset):
                                
                                 ¶
                                
                                    GenericAPIView
                                
                            
                        
        Return a single page of results, or `None` if pagination is disabled.
        
                                                    def paginate_queryset(self, queryset):
        """
        Return a single page of results, or `None` if pagination is disabled.
        """
        if self.paginator is None:
            return None
        return self.paginator.paginate_queryset(queryset, self.request, view=self)
                                
                                    def
                                    partial_update(self, request, *args, **kwargs):
                                
                                 ¶
                                
                                    UpdateModelMixin
                                
                            
                            def partial_update(self, request, *args, **kwargs):
        kwargs['partial'] = True
        return self.update(request, *args, **kwargs)
                                
                                    def
                                    patch(self, request, *args, **kwargs):
                                
                                 ¶
                                
                                    RetrieveUpdateAPIView
                                
                            
                            def patch(self, request, *args, **kwargs):
        return self.partial_update(request, *args, **kwargs)
                                
                                    def
                                    perform_authentication(self, request):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Perform authentication on the incoming request.
        Note that if you override this and simply 'pass', then authentication
        will instead be performed lazily, the first time either
        `request.user` or `request.auth` is accessed.
        
                                                    def perform_authentication(self, request):
        """
        Perform authentication on the incoming request.
        Note that if you override this and simply 'pass', then authentication
        will instead be performed lazily, the first time either
        `request.user` or `request.auth` is accessed.
        """
        request.user
                                
                                    def
                                    perform_content_negotiation(self, request, force=False):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        Determine which renderer and media type to use render the response.
        
                                                    def perform_content_negotiation(self, request, force=False):
        """
        Determine which renderer and media type to use render the response.
        """
        renderers = self.get_renderers()
        conneg = self.get_content_negotiator()
        try:
            return conneg.select_renderer(request, renderers, self.format_kwarg)
        except Exception:
            if force:
                return (renderers[0], renderers[0].media_type)
            raise
                                
                                    def
                                    perform_update(self, serializer):
                                
                                 ¶
                                
                                    UpdateModelMixin
                                
                            
                            def perform_update(self, serializer):
        serializer.save()
                                
                                    def
                                    permission_denied(self, request, message=None):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        If request is not permitted, determine what kind of exception to raise.
        
                                                    def permission_denied(self, request, message=None):
        """
        If request is not permitted, determine what kind of exception to raise.
        """
        if request.authenticators and not request.successful_authenticator:
            raise exceptions.NotAuthenticated()
        raise exceptions.PermissionDenied(detail=message)
                                
                                    def
                                    put(self, request, *args, **kwargs):
                                
                                 ¶
                                
                                    RetrieveUpdateAPIView
                                
                            
                            def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)
                                
                                    def
                                    raise_uncaught_exception(self, exc):
                                
                                 ¶
                                
                                    APIView
                                
                            
                            def raise_uncaught_exception(self, exc):
        if settings.DEBUG:
            request = self.request
            renderer_format = getattr(request.accepted_renderer, 'format')
            use_plaintext_traceback = renderer_format not in ('html', 'api', 'admin')
            request.force_plaintext_errors(use_plaintext_traceback)
        raise exc
                                
                                    def
                                    retrieve(self, request, *args, **kwargs):
                                
                                 ¶
                                
                                    RetrieveModelMixin
                                
                            
                            def retrieve(self, request, *args, **kwargs):
        instance = self.get_object()
        serializer = self.get_serializer(instance)
        return Response(serializer.data)
                                
                                    def
                                    setup(self, request, *args, **kwargs):
                                
                                 ¶
                                
                                    View
                                
                            
                        Initialize attributes shared by all view methods.
    def setup(self, request, *args, **kwargs):
        """Initialize attributes shared by all view methods."""
        if hasattr(self, 'get') and not hasattr(self, 'head'):
            self.head = self.get
        self.request = request
        self.args = args
        self.kwargs = kwargs
                                
                                    def
                                    throttled(self, request, wait):
                                
                                 ¶
                                
                                    APIView
                                
                            
                        
        If request is throttled, determine what kind of exception to raise.
        
                                                    def throttled(self, request, wait):
        """
        If request is throttled, determine what kind of exception to raise.
        """
        raise exceptions.Throttled(wait)
                                
                                    def
                                    update(self, request, *args, **kwargs):
                                
                                 ¶
                                
                                    UpdateModelMixin
                                
                            
                            def update(self, request, *args, **kwargs):
        partial = kwargs.pop('partial', False)
        instance = self.get_object()
        serializer = self.get_serializer(instance, data=request.data, partial=partial)
        serializer.is_valid(raise_exception=True)
        self.perform_update(serializer)
        if getattr(instance, '_prefetched_objects_cache', None):
            # If 'prefetch_related' has been applied to a queryset, we need to
            # forcibly invalidate the prefetch cache on the instance.
            instance._prefetched_objects_cache = {}
        return Response(serializer.data)