2015-08-22 3 views
2

У меня есть рабочий сайт Django 1.8, и я хочу добавить RESTful API, используя django-rest-framework. Я хотел бы поддержать CSV, а также форматы JSON, и я озадачен тем, как это сделать.Возврат CSV-формата из django-rest-framework?

В api/urls.py у меня есть это:

from django.conf.urls import url, include 
from rest_framework import routers 
from rest_framework.urlpatterns import format_suffix_patterns 
import views 

router = routers.DefaultRouter() 
urlpatterns = [ 
    url(r'^organisation/$', views.organisation), 
] 
urlpatterns = format_suffix_patterns(urlpatterns, 
           allowed=['json', 'csv']) 

И у меня есть это в api/views.py:

class JSONResponse(HttpResponse): 
    """ 
    An HttpResponse that renders its content into JSON. 
    """ 
    def __init__(self, data, **kwargs): 
     content = JSONRenderer().render(data) 
     kwargs['content_type'] = 'application/json' 
     super(JSONResponse, self).__init__(content, **kwargs) 

@api_view(['GET']) 
def organisation(request, format=None): 
    code = request.query_params.get('code', None) 
    print 'format', format 
    organisation = Organisation.objects.get(code=code) 
    serializer = OrgSerializer(Organisation) 
    data = serializer.data 
    return JSONResponse(data) 

Но если я пойду в api/1.0/organisation.csv?code=123, я все еще вижу:

format json 

в консоль.

Что я делаю неправильно? И как мне вернуть CSV, как только мне удастся захватить формат? (Я подозреваю, что я, вероятно, ошибаюсь, написав свой собственный JSONResponse.)

ответ

2

Получил его. Хитрость заключается в том, чтобы установить djangorestframework-csv, а затем добавьте следующий код в настройках:

REST_FRAMEWORK = { 
    'DEFAULT_RENDERER_CLASSES': (
     'rest_framework.renderers.JSONRenderer', 
     'rest_framework.renderers.BrowsableAPIRenderer', 
     'rest_framework_csv.renderers.CSVRenderer', 
    ), 
} 

А потом лом JSONResponse функцию в views.py и просто делать return Response(serializer.data) вместо этого. Очень легко в конце.

Смежные вопросы