美味馅饼 - 使用非ORM对象返回JSON

时间:2016-06-17 14:21:10

标签: python django tastypie

我是新鲜的美味派,我试图简单地从我的API返回一个json结构。

我有以下课程:

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是一个为非ORM对象返回json_dump的方法。

当我在AJAX中发送GET请求时,我收到了以下响应:

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
  • 回滚

但这看起来很重。还有其他方法可以做到这一点或使用不同的方法吗?

提前感谢您的帮助,

1 个答案:

答案 0 :(得分: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%,并且很好地描述了你会没事的。