The default set of renderers may be set globally, using the DEFAULT_RENDERER_CLASSES
setting. For example, the following settings would use XML
as the main media type and also include the self describing API.
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework_xml.renderers.XMLRenderer',
)
}
You can also set the renderers used for an individual view, or viewset,
using the APIView
class based views.
from django.contrib.auth.models import User
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework_xml.renderers import XMLRenderer
class UserCountView(APIView):
"""
A view that returns the count of active users in XML.
"""
renderer_classes = (XMLRenderer,)
def get(self, request, format=None):
user_count = User.objects.filter(active=True).count()
content = {'user_count': user_count}
return Response(content)
Or, if you're using the @api_view
decorator with function based views.
@api_view(['GET'])
@renderer_classes((XMLRenderer,))
def user_count_view(request, format=None):
"""
A view that returns the count of active users in XML.
"""
user_count = User.objects.filter(active=True).count()
content = {'user_count': user_count}
return Response(content)
Renders REST framework's default style of XML
response content.
Note that the XML
markup language is used typically used as the base language for more strictly defined domain-specific languages, such as RSS
, Atom
, and XHTML
.
If you are considering using XML
for your API, you may want to consider implementing a custom renderer and parser for your specific requirements, and using an existing domain-specific media-type, or creating your own custom XML-based media-type.
.media_type: application/xml
.format: '.xml'
.charset: utf-8
item_tag_name: list-item
.root_tag_name: root