Python django tastypie simple GET给出400错误

Python django tastypie simple GET给出400错误,python,django,python-2.7,tastypie,http-status-code-400,Python,Django,Python 2.7,Tastypie,Http Status Code 400,我正在使用python2.7、django1.6和apache2。我已启用跨域访问。我试过使用和不使用crsf代币。我不知道我做错了什么 访问: url/to/site/contacts/api/v1/adresponses/1 工作正常,因此可以设置tastypie。我可以看到广告的回应 有人请帮忙。几天来,我一直在努力让tastypie工作 这是我的api.py class UserResource(ModelResource): class Meta: qu

我正在使用python2.7、django1.6和apache2。我已启用跨域访问。我试过使用和不使用crsf代币。我不知道我做错了什么

访问: url/to/site/contacts/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不起作用,但我看到了这个例子,它按照预期工作。也许是因为我没有成功的功能

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

我需要查看api的url设置,以便为您提供更多帮助,但对于初学者,您提供的原始url:

url: 'url/to/site/contacts/api/v1/adresponses/1',
你的答案是什么

url: '../../api/v1/user/',
不要调用同一个资源,这会使诊断更加困难

但是,第一个url是绝对路径,第二个是相对路径,这可能会导致设置出现问题,从而产生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',

我认为问题在于在url末尾使用“/”是强制性的。 您应该尝试使用url:'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配置

我知道如果不成功,我会看到结果,但我的问题是它是否导致了400错误。根据你的回答,我猜不是,错误是由“接受”部分引起的。谢谢您的回复!:D