diff options
| author | Tom Christie | 2012-09-12 10:12:13 +0100 | 
|---|---|---|
| committer | Tom Christie | 2012-09-12 10:12:13 +0100 | 
| commit | c85f799ade0710dd27838e8bfc78989c80213d6a (patch) | |
| tree | 39ffc44c768c1b24d9e06e64393eb2194216b571 /docs/api-guide/exceptions.md | |
| parent | d4f8b4cf0683923fe85652f8fd572d2931eb3074 (diff) | |
| download | django-rest-framework-c85f799ade0710dd27838e8bfc78989c80213d6a.tar.bz2 | |
Updating docs
Diffstat (limited to 'docs/api-guide/exceptions.md')
| -rw-r--r-- | docs/api-guide/exceptions.md | 79 | 
1 files changed, 79 insertions, 0 deletions
| diff --git a/docs/api-guide/exceptions.md b/docs/api-guide/exceptions.md index bb3ed56e..c8ccb08b 100644 --- a/docs/api-guide/exceptions.md +++ b/docs/api-guide/exceptions.md @@ -2,4 +2,83 @@  # 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][cite] +## 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". + +[cite]: http://www.doughellmann.com/articles/how-tos/python-exception-handling/index.html
\ No newline at end of file | 
