2016-06-17 2 views
2

Я новенький с вкусным пирогом, и я пытаюсь просто вернуть структуру json из моего API.вкусный пирог - Возвращение JSON с объектом без ORM

У меня есть следующий класс:

class CaseResource(Resource): 
    class Meta: 
     authentication = SessionAuthentication() 
     resource_name = 'case' 
     allowed_methods = ['get'] 

    def obj_get_list(self, request, **kwargs): 
     case = request.GET.get('q') 
     if case: 
      mycase = connect_and_retrieve_data(request, q) 
      return self.create_response(request, {'mycase': mycase}) 

connect_and_retrieve_data является метод, который возвращает json_dump для не объекта ОРМ.

Когда я посылаю запрос GET в AJAX, я получил следующий ответ:

NotImplementedError at /mydashboard/api/v1/case/ 
No exception message supplied 

В API указал мне «Использование Tastypie с не-ORM источников данных», хотя я надеялся на что-то менее тяжелая рука.

Я предполагаю, что я должен переписать все методы:

  • detail_uri_kwargs
  • get_object_list
  • obj_get_list
  • obj_get
  • obj_create
  • obj_update
  • obj_delete_list
  • obj_delete
  • Откат

, но это выглядит довольно тяжелым. Есть ли другой способ сделать это или использовать другой метод?

Заранее спасибо за вашу помощь,

+0

'obj_get_list' предназначен для вызова при выполнении запроса GET. – slackmart

+0

Tastypie предназначен для создания API стиля REST. Поэтому вы не должны отправлять запрос 'POST' в' obj_get_list'. С Tastypie ваш запрос 'POST' направлен на' obj_create'. – ohrstrom

+0

Привет, ohrstrom и slackmart, спасибо за ваше обновление, в этом случае я хотел бы выполнить одно и то же действие с запросом GET. – Virtuose

ответ

0

Для одного запроса вы могли бы сделать ни один RESTful конечной точки. Это было бы неправильно, если бы вы по какой-то причине решили, что весь ваш сервис будет 100% RESTful.

Но, если вы ищете что-то не так сильно попробовать стандартный вид Django:

import json 

from django.http import (HttpResponse, 
        HttpResponseNotAllowed, HttpResponseForbidden) 
from django.views.decorators.csrf import csrf_exempt 


@csrf_exempt 
def connect_and_retrieve_data(request): 
    """ 
    Docstrings.. 
    """ 
    if not request.user.is_authenticated(): 
     return HttpResponseForbidden(json.dumps({'message': 'User must be authenticated'}), 
            content_type='application/json') 
    if request.method != 'GET': 
     return HttpResponseNotAllowed(permitted_methods=('GET',)) 

    if request.GET.get('q'): 
     mycase = connect_and_retrieve_data(request, request.GET.get('q')) 
     mycase = json.loads(mycase) 
     return HttpResponse(
      json.dumps({'mycase': mycase, 'success': True}), 
      content_type='application/json') 
    else: 
     return HttpResponse(
      json.dumps({'message': 'Missing q param', 'success': False}), 
      content_type='application/json') 

быть в курсе, что ваш проект может выпадать из-под контроля в ближайшее время, если вы получите слишком много недокументированных и непроверенных конечных точек, таких как это в RESTful API. В какой-то момент вы можете подумать о чем-то еще, чем RESTful. Но если это не более 10% всех конечных точек и красиво описано, вы будете в порядке.

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