• Stars
    star
    349
  • Rank 120,793 (Top 3 %)
  • Language
    Python
  • License
    BSD 2-Clause "Sim...
  • Created over 11 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

CSV Tools for Django REST Framework

djangorestframework-csv

build status

CSV Tools for Django REST Framework

Author: Mjumbe Wawatu Poe, Follow me on Twitter.

Installation

$ pip install djangorestframework-csv

Usage

views.py

from rest_framework.views import APIView
from rest_framework.settings import api_settings
from rest_framework_csv import renderers as r

class MyView (APIView):
    renderer_classes = (r.CSVRenderer, ) + tuple(api_settings.DEFAULT_RENDERER_CLASSES)
    ...

Alternatively, to set CSV as a default rendered format, add the following to the settings.py file:

REST_FRAMEWORK = {
    # specifying the renderers
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework_csv.renderers.CSVRenderer',
    ),
}

Ordered Fields

By default, a CSVRenderer will output fields in sorted order. To specify an alternative field ordering you can override the header attribute. There are two ways to do this:

  1. Create a new renderer class and override the header attribute directly:

    class MyUserRenderer (CSVRenderer):
        header = ['first', 'last', 'email']
    
    @api_view(['GET'])
    @renderer_classes((MyUserRenderer,))
    def my_view(request):
        users = User.objects.filter(active=True)
        content = [{'first': user.first_name,
                    'last': user.last_name,
                    'email': user.email}
                   for user in users]
        return Response(content)
  2. Use the renderer_context to override the field ordering on the fly:

    class MyView (APIView):
        renderer_classes = [CSVRenderer]
    
        def get_renderer_context(self):
            context = super().get_renderer_context()
            context['header'] = (
                self.request.GET['fields'].split(',')
                if 'fields' in self.request.GET else None)
            return context
    
        ...

Labeled Fields

Custom labels can be applied to the CSVRenderer using the labels dict attribute where each key corresponds to the header and the value corresponds to the custom label for that header.

1) Create a new renderer class and override the header and labels attribute directly:

class MyBazRenderer (CSVRenderer):
    header = ['foo.bar']
    labels = {
        'foo.bar': 'baz'
    }

Pagination

Using the renderer with paginated data is also possible with the new PaginatedCSVRenderer class and should be used with views that paginate data

For more information about using renderers with Django REST Framework, see the API Guide or the Tutorial.

Running the tests

To run the tests against the current environment:

$ ./manage.py test

Changelog

2.1.1

  • Add support for byte order markers (BOM) (thanks @Yaoxin)
  • Documentation updates (thanks @rjemanuele and @coreyshirk)

2.1.0

  • CSVs with no data still output header labels (thanks @travisbloom)
  • Include a paginated renderer as part of the app (thanks @masterfloda)
  • Generators can be used as data sources for CSVStreamingRenderer (thanks @jrzerr)
  • Support for non UTF-8 encoding parsing (thanks @weasellin)

2.0.0

  • Make CSVRenderer.render return bytes, and CSVParser.parse expect a byte stream.
  • Have data-less renders print header row, if header is explicitly supplied
  • Drop Django 1.7 tests and add Django 1.10 tests
  • have CSVRenderer.tableize act as a generator when possible (i.e., when a header is explicitly specified).
  • Add docs for labels thanks to @radyz
  • Fix header rendering in CSVStreamingRenderer thanks to @radialnash
  • Improve unicode handling, thanks to @brandonrobertz

1.4.0/1.4.1

  • Add support for changing field labels in the CSVRenderer, thanks to @soby
  • Add support for setting CSVRenderer headers, labels, and writer_opts as renderer_context parameters.
  • Renamed CSVRenderer.headers to CSVRenderer.header; old spelling is still available for backwards compatibility, but may be removed in the future.

1.3.4

  • Support streaming CSV rendering, via @ivancrneto
  • Improved test configuration and project metadata, via @ticosax

1.3.2/1.3.3

  • Support unicode CSV parsing, and universal newlines, with thanks to @brocksamson

1.3.1

  • Renderer handles case where data is not a list by wrapping data in a list, via pull request from @dougvk
  • Better cross Python version support, via @paurullan and @vishen

1.3.0

  • Support for Python 3, derived from work by @samdobson

1.2.0

  • Support consistent ordering of fields in rendered CSV; thanks to @robguttman
  • Support specifying particular fields/headers in custom CSV renderer by overriding the headers attribute.

1.1.0

  • Support simple CSV parsing; thanks to @sebastibe

1.0.1

  • Add the package manifest

1.0.0

  • Initial release

More Repositories

1

django-proxy

A simple HTTP proxy in a Django app
Python
136
star
2

django-jstemplate

Embed Javascript templates (mustache.js and more) into Django templates with minimal fuss.
Python
40
star
3

django-model-blocks

Generic templates for Django models
Python
33
star
4

djangobars

An extension to allow Django to use Handlebars templates through the pybars port of Handlebars.js
Python
28
star
5

django-rest-framework-gis

GeoDjango tools for Django Rest Framework
Python
10
star
6

jokosher

Jokosher is a simple yet powerful multi-track studio. With it you can create and record music, podcasts and more, all from an integrated simple environment. Forked from https://launchpad.net/jokosher
Python
7
star
7

virtualenv-tools

Simple scripts for managing virtual environments
Shell
6
star
8

gof-patterns

A simple "flash cards" mobile app for the Gang of Four design patterns.
JavaScript
6
star
9

Septnuts

JavaScript
6
star
10

django-backbonejs

A module with a few convenience tags for integrating Backbone.js into a Django project
JavaScript
6
star
11

apps4septa

Python
5
star
12

elevator-pitch-builder

A recreation of the Harvard Business School Elevator Pitch Builder app
JavaScript
5
star
13

approval-workflows

An application to do approval workflows, and that's all. Very much in flux.
Python
4
star
14

phillytranspo_art

JavaScript
4
star
15

philly-councilmatic

Philly instance of Councilmatic
HTML
3
star
16

cyborgcity

3
star
17

LegisPy

Wrapper for Granicus's Legistar SOAP API
Python
3
star
18

django-model-filters

Django generic template filters for model instances and lists
Python
3
star
19

pcs-api

A screenscraping API for the PhillyCarShare reservation system
Python
2
star
20

My-Django-Template

A starter Django project, with a bunch of my default assumptions.
Python
2
star
21

subscribe.me

Subscribe to RSS and ATOM by email
Python
2
star
22

django-payable

An invoicing application built with Django and Stripe
Python
2
star
23

sample-local-councilmatic

A sample instance of Councilmatic, a subscription service for city council legislative information
XSLT
2
star
24

Task-Manager

A simple task manager, inspired by Pivotal Tracker
2
star
25

heroku-buildpack-python-no-node

Shell
2
star
26

Django-ORM-Standalone-Test

standalone-django-orm
Python
2
star
27

hamster-harvester

Utilities for syncing work between Harvest and Hamster time trackers
Python
2
star
28

odc-dotcloud

Open-Data-Catalog Dotcloud Deployment
Python
2
star
29

sharabouts-datastore-project

JavaScript
1
star
30

chicago-councilmatic

Python
1
star
31

gedit-settings

My gedit setup
Python
1
star
32

carshare-api

Simple carshare api. Meant to be much simpler than pcs-api
Python
1
star
33

pcs-mobile

A Python (AppEngine) front-end to the PCS reservation system API
Python
1
star
34

cbk-js-canvas

HTML
1
star
35

parcels-api

Python
1
star
36

electory

JavaScript
1
star
37

baldwin

Baldwin is a simple wrapper around the SEPTA "Next to Arrive" API to help you never miss your train.
JavaScript
1
star
38

musa-portfolio-template

SCSS
1
star
39

cyborg-city-presentation

HTML
1
star
40

shareabouts-dashboard

A simple dashboard for viewing Shareabouts stats
JavaScript
1
star
41

planning-feed-hub

JavaScript
1
star
42

tropo_colors

A simple application to change the background of a web page on voice command
Python
1
star
43

gnome-web-extensions

My extensions for the Web (Epiphany) Browser
JavaScript
1
star
44

BGC

A collection of documentation and resources for teaching young children to program
1
star
45

localplans

View public planning feeds on a map
JavaScript
1
star
46

Django-Notes

Just a wiki of examples for Django Generic Class-Based Views
1
star
47

try_git

1
star
48

django-subscriptions

Allow users to subscribe to feeds of information
Python
1
star