2

我发送了一个 POST,它创建了一个新的简单Resource(不是 ModelResource),并且有效。

我的问题是如何将创建的资源bundle属性返回到 ajax 响应?

这是资源示例:

class MyResource(Resource):
    x = fields.CharField(attribute='x')
    y = fields.CharField(attribute='y')

    class Meta:
        resource_name = 'myresource'
        object_class = XYObject
        authorization   = Authorization()

    def obj_create(self, bundle, request=None, **kwargs):
        x = bundle.data["x"]
        x = bundle.data["y"]
        bundle.obj = XYObject(x, y)
        return bundle

这是 POST 请求

$.ajax({
               type: "POST",
               url: '/api/v1/myresource/',
               contentType: 'application/json',
               data: data,
               dataType: 'json',
               processData: false,
               success: function(response)
               {
                //get my resource here
               },
               error: function(response){
                   $("#messages").show('error');
                 }
               });
4

3 回答 3

9

您可以添加always_return_data = True到您的 Meta。然后,您将获得一个202带有序列化数据的而不是正常的201.

来自https://stackoverflow.com/a/10138745/931277

以下是文档:http ://django-tastypie.readthedocs.org/en/latest/resources.html#always-return-data

于 2012-10-16T17:15:29.070 回答
2

事实上,我不会通过这个来保存数据Resource,它是一个基于 ajax 的业务逻辑资源,应该应用一些控件,

我更喜欢提出一个ImmediateHttpResponse,这样我就可以像这样指定 HttpResponse 类型:

def obj_create(self, bundle, request=None, **kwargs):
    bundle.data['results'] = bundle.obj.check(request)
    if bundle.data['results']['valid']:
         raise ImmediateHttpResponse(self.create_response(request, bundle,response_class = HttpCreated))
    raise ImmediateHttpResponse(self.create_response(request,  bundle.data['results']['message'],response_class = HttpBadRequest))
于 2012-10-16T22:10:38.343 回答
0

Tastypie 使用post_list(1) 方法。该方法调用您的obj_create方法。然后它返回一个201 CreatedHTTP 响应,并设置 Location 标头。因此,长话短说,您应该检查 API 调用返回的标头并检查 Location标头。

编辑:

一些代码很有用:

...
success: function(data, textStatus, jqXHR)
    {
    // You must look for Location
    console.log(jqXHR.getAllResponseHeaders());
    },
...

(1) https://github.com/toastdriven/django-tastypie/blob/master/tastypie/resources.py#L1244

于 2012-10-16T16:52:40.603 回答