# REST Framework XML

XML support for Django REST Framework

## Overview

XML support extracted as a third party package directly from the official Django REST Framework implementation. It requires the defusedxml package only because it safeguards against some security issues that were discovered.

Note: XML output provided is an ad-hoc format that isn't formally described. If you have specific XML requirements you'll need to write your own XML parsers/renderers in order to fully control the representation.

## Requirements

- Python 3.5+
- Django 2.2+
- Django REST Framework 3.11+

## Installation

Install using `pip`...

    $ pip install djangorestframework-xml

## Example

    REST_FRAMEWORK = {
        'DEFAULT_PARSER_CLASSES': (
            'rest_framework_xml.parsers.XMLParser',
        ),
        'DEFAULT_RENDERER_CLASSES': (
            'rest_framework_xml.renderers.XMLRenderer',
        ),
    }

You can also set the renderer and parser used for an individual view, or viewset, using the APIView class based views.

    from rest_framework import routers, serializers, viewsets
    from rest_framework_xml.parsers import XMLParser
    from rest_framework_xml.renderers import XMLRenderer

    class UserSerializer(serializers.HyperlinkedModelSerializer):
        class Meta:
            model = User
            fields = ('url', 'username', 'email', 'is_staff')

    class UserViewSet(viewsets.ModelViewSet):
        queryset = User.objects.all()
        serializer_class = UserSerializer
        parser_classes = (XMLParser,)
        renderer_classes = (XMLRenderer,)

### Sample output

    <?xml version="1.0" encoding="utf-8"?>
    <root>
        <list-item>
            <url>http://127.0.0.1:8000/users/1/.xml</url>
            <username>jpadilla</username>
            <email>jpadilla@example.com</email>
            <is_staff>True</is_staff>
        </list-item>
    </root>

## Testing

Install testing requirements.

    $ pip install -e '.[dev]'

Run with pytest.

    $ pytest

You can also use the excellent tox testing tool to run the tests against all supported versions of Python and Django. Install tox globally, and then simply run:

    $ tox

## Documentation

To build the documentation, you'll need to install `mkdocs`.

    $ pip install mkdocs

To preview the documentation:

    $ mkdocs serve
    Running at: http://127.0.0.1:8000/

To build the documentation:

    $ mkdocs build

#### Search

From here you can search these documents. Enter your search terms below.

#### Keyboard Shortcuts

Keys | Action
--- | ---
`?` | Open this help
`n` | Next page
`p` | Previous page
`s` | Search