File download and upload support for Django REST framework
REST framework files allows you to download a file in the format used to render the response and also allows creation of model instances by uploading a file containing the model fields.
- Python (2.7, 3.5, 3.6)
- Django REST framework (3.4, 3.5, 3.6, 3.7, 3.8)
Install using pip:
pip install djangorestframework-files
from django.db import models class ABC(models.Model): name = models.CharField(max_length=255)
from rest_framework import serializers from .models import ABC class ABCSerializer(serializers.ModelSerializer): class Meta: model = ABC fields = '__all__'
from rest_framework.parsers import JSONParser, MultiPartParser from rest_framework_files.viewsets import ImportExportModelViewSet from .models import ABC from .serializers import ABCSerializer class ABCViewSet(ImportExportModelViewSet): queryset = ABC.objects.all() serializer_class = ABCSerializer # if filename is not provided, the view name will be used as the filename filename = 'ABC' # renderer classes used to render your content. will determine the file type of the download renderer_classes = (JSONParser, ) parser_classes = (MultiPartParser, ) # parser classes used to parse the content of the uploaded file file_content_parser_classes = (JSONParser, )
Some third party packages that offer media type support:
from rest_framework import routers from .views import ABCViewSet router = routers.ImportExportRouter() router.register(r'abc', ABCViewSet) urlpatterns = router.urls
To download a json file you can go to the url /abc/?format=json. The format query parameter specifies the media type you want your response represented in. To download an xml file, your url would be /abc/?format=xml. For this to work, make sure you have the respective renderers to render your response.
To create model instances from a file, upload a file to the url /abc/. Make sure the content of the file can be parsed by the parsers specified in the file_content_parser_classes or else it will return a HTTP_415_UNSUPPORTED_MEDIA_TYPE error.
For sample file examples you can upload, check the assets folder
For more examples on how to use the viewsets or generic views, check the test application