django-tastypie simple GET给出400错误

时间:2014-03-10 22:19:04

标签: python django python-2.7 tastypie http-status-code-400

我正在使用python2.7,django1.6和apache2。我启用了跨域访问。我尝试过使用和不使用crsf令牌。我不知道我做错了什么。

来访: URL /到/网站/联系人/ API / V1 / adresponses / 1 工作正常,因此设置了tastypie。我可以看到广告回复。

有人请帮忙。我一直试图让tastypie工作好几天。

这是我的api.py

class UserResource(ModelResource):
    class Meta:
            queryset = User.objects.all()
            resource_name = 'user'
            fields=['username', 'id']
            allowed_methods = ['get']
            authorization = Authorization()
            authentication = Authentication()

 class AdResponsesResource(ModelResource):
    users = fields.ManyToManyField('contacts.api.UserResource', 'users',
                    related_name='adresponse')
    class Meta:
            queryset = AdResponses.objects.all()
            resource_name = 'adresponses'
            authorization = Authorization()
            authentication = Authentication()

这是我的ajax电话

$(function (){
    $.ajax({
        url: 'url/to/site/contacts/api/v1/adresponses/1',
        type: 'GET',
        accepts: 'application/json',
        dataType: 'json'
    });

所以我不完全确定为什么我的原始发布的js不起作用但是我看到了这个例子http://django-tastypie.readthedocs.org/en/latest/cookbook.html并且它按预期工作。也许是因为我没有成功的功能?

$.ajax({
    url: '../../api/v1/user/',
    contentType: 'application/json',
    type: 'GET', 
    success: function(data, textStatus, jqXHR) {
         // Your processing of the data here.
         console.log(data);
         }
    });

2 个答案:

答案 0 :(得分:1)

我需要看到为api设置的网址才能为您提供更多帮助,但对于初学者来说,您提供了原始网址:

url: 'url/to/site/contacts/api/v1/adresponses/1',

和你答案中的那个

url: '../../api/v1/user/',

不要调用相同的资源,这使得诊断更加困难。

但是,第一个网址是绝对路径,第二个网址是相对路径,这可能会导致您的ALLOWED_HOSTS设置出现问题,而这可能会产生400错误。

所以试试这个:

 $.ajax({
    url: '../../api/v1/adresponses/1',
    contentType: 'application/json',
    type: 'GET', 
    success: function(data, textStatus, jqXHR) {
         console.log(data);
         }
    });

是,如果没有成功功能,您将看不到任何结果:

success: function(data, textStatus, jqXHR) {
    console.log(data);
}

console.log是让你在控制台中看到结果的原因。

您的原始代码未提供:

contentType: 'application/json',

你有:

accepts: 'application/json',

答案 1 :(得分:0)

我认为问题在于使用" /"在网址的末尾是强制性的。 您应该尝试使用网址:' url / to / site / contacts / api / v1 / adresponses / 1 /',

当您访问url / to / site / contacts / api / v1 / adresponses / 1时,它会重定向到url / to / site / contacts / api / v1 / adresponses / 1 /,具体取决于您的tastypie配置