Parsers
-.parse(request)
+++Machine interacting web services tend to use more +structured formats for sending data than form-encoded, since they're +sending more complex data than simple forms
+— Malcom Tredinnick, Django developers group
+
diff --git a/api-guide/parsers.html b/api-guide/parsers.html index 08d5bf8da..4c2eb7594 100644 --- a/api-guide/parsers.html +++ b/api-guide/parsers.html @@ -94,7 +94,12 @@
++Machine interacting web services tend to use more +structured formats for sending data than form-encoded, since they're +sending more complex data than simple forms
+— Malcom Tredinnick, Django developers group
+
++Before a TemplateResponse instance can be returned to the client, it must be rendered. The rendering process takes the intermediate representation of template and context, and turns it into the final byte stream that can be served to the client.
+ +
If you're doing REST-based web service stuff ... you should ignore request.POST.
-— Malcom Tredinnick, Django developers group
+— Malcom Tredinnick, Django developers group
REST framework's Request
class extends the standard HttpRequest
, adding support for parsing multiple content types, allowing browser-based PUT
, DELETE
and other methods, and adding flexible per-request authentication.
-Django's class based views are a welcome departure from the old-style views.
REST framework provides a simple APIView
class, built on Django's django.generics.views.View
. The APIView
class ensures five main things:
Request
instances.Request
instances will have their renderers
and authentication
attributes automatically set. Response
instances will have their parsers
and serializer
attributes automatically set.APIException
exceptions will be caught and return appropriate responses.Additionally there are a some minor extras, such as providing a default options
handler, setting some common headers on the response prior to return, and providing the useful initial()
and final()
hooks.
Describe that APIView handles regular .get(), .post(), .put(), .delete() etc...
-REST framework provides an APIView
class, which subclasses Django's View
class.
APIView
classes are different from regular View
classes in the following ways:
Request
instances, not Django's HttpRequest
instances.Response
, instead of Django's HttpResponse
. The view will manage content negotiation and setting the correct renderer on the response.APIException
exceptions will be caught and mediated into appropriate responses.Using the APIView
class is pretty much the same as using a regular View
class, as usual, the incoming request is dispatched to an appropriate handler method such as .get()
or .post()
. Additionally, a number of attributes may be set on the class that control various aspects of the API policy.
For example:
+class ListUsers(APIView):
+ """
+ View to list all users in the system.
+
+ * Requires token authentication.
+ * Only admin users are able to access this view.
+ """
+ authentication_classes = (authentication.TokenAuthentication,)
+ permission_classes = (permissions.IsAdmin,)
+
+ def get(self, request, format=None):
+ """
+ Return a list of all users.
+ """
+ users = [user.username for user in User.objects.all()]
+ return Response(users)
+
+The following attributes control the pluggable aspects of API views.
+The following methods are used by REST framework to instantiate the various pluggable API policies. You won't typically need to override these methods.
+The following methods are called before dispatching to the handler method.
+The following methods are called directly by the view's .dispatch()
method.
+These perform any actions that need to occur before or after calling the handler methods such as .get()
, .post()
, put()
and .delete()
.
+
Performs any actions that need to occur before the handler method gets called. +This method is used to enforce permissions and throttling, and perform content negotiation.
+You won't typically need to override this method.
+Any exception thrown by the handler method will be passed to this method, which either returns a Response
instance, or re-raises the exception.
The default implementation handles any subclass of rest_framework.exceptions.APIException
, as well as Django's Http404
and PermissionDenied
exceptions, and returns an appropriate error response.
If you need to customize the error responses your API returns you should subclass this method.
+Ensures that the request object that is passed to the handler method is an instance of Request
, rather than the usual Django HttpRequest
.
You won't typically need to override this method.
+Ensures that any Response
object returned from the handler method will be rendered into the correct content type, as determined by the content negotation.
You won't typically need to override this method.
++The world can only really be changed one piece at a time. The art is picking that piece.
+ +
Describe compat module
-Many thanks to everyone who's contributed to the project.