django-rest-framework/docs/api-guide/exceptions.md
2012-09-12 10:12:13 +01:00

2.8 KiB

Exceptions

Exceptions… allow error handling to be organized cleanly in a central or high-level place within the program structure.

— Doug Hellmann, Python Exception Handling Techniques

Exception handling in REST framework views

REST framework's views handle various exceptions, and deal with returning appropriate error responses for you.

The handled exceptions are:

  • Subclasses of APIException raised inside REST framework.
  • Django's Http404 exception.
  • Django's PermissionDenied exception.

In each case, REST framework will return a response, rendering it to an appropriate content-type.

By default all error messages will include a key details in the body of the response, but other keys may also be included.

For example, the following request:

DELETE http://api.example.com/foo/bar HTTP/1.1
Accept: application/json

Might recieve an error response indicating that the DELETE method is not allowed on that resource:

HTTP/1.1 405 Method Not Allowed
Content-Type: application/json; charset=utf-8
Content-Length: 42

{"detail": "Method 'DELETE' not allowed."}

APIException

Signature: APIException(detail=None)

The base class for all exceptions raised inside REST framework.

To provide a custom exception, subclass APIException and set the .status_code and .detail properties on the class.

ParseError

Signature: ParseError(detail=None)

Raised if the request contains malformed data when accessing request.DATA or request.FILES.

By default this exception results in a response with the HTTP status code "400 Bad Request".

PermissionDenied

Signature: PermissionDenied(detail=None)

Raised when an incoming request fails the permission checks.

By default this exception results in a response with the HTTP status code "403 Forbidden".

MethodNotAllowed

Signature: MethodNotAllowed(method, detail=None)

Raised when an incoming request occurs that does not map to a handler method on the view.

By default this exception results in a response with the HTTP status code "405 Method Not Allowed".

UnsupportedMediaType

Signature: UnsupportedMediaType(media_type, detail=None)

Raised if there are no parsers that can handle the content type of the request data when accessing request.DATA or request.FILES.

By default this exception results in a response with the HTTP status code "415 Unsupported Media Type".

Throttled

Signature: Throttled(wait=None, detail=None)

Raised when an incoming request fails the throttling checks.

By default this exception results in a response with the HTTP status code "429 Too Many Requests".