我遇到tastypie问题并向其发布数据。我只能检索401错误代码。
为了澄清,我能够成功地从tastypie api中检索数据。
附件是代码片段,也许有人可以帮助我摆脱这个。 在我开始之前,有一点背景:我正在使用自定义授权类。
class CustomAuthorization(Authorization):
def is_authorized(self, request, object=None):
if request.user.username == 'custom_user':
return True
return False
以下是实际资源:
class CustomObjectResource(ModelResource):
class Meta:
queryset = CustomObject.objects.all()
authentication = ApiKeyAuthentication()
authorization = CustomAuthorization()
list_allowed_methods = ['get', 'post', ]
detail_allowed_methods = ['get', 'post', 'put']
include_resource_uri = False
resource_name = 'customobject'
always_return_data = True
def obj_create(self, bundle, request=None, **kwargs):
try:
print "request"
except:
raise BadRequest('I couldnt save your information.')
return True
我知道obj_create方法是假的,但它应该仍然被调用并做某事,或者这已经是问题了?
以下curl命令用于将数据发布到tastypie API。
curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"body": "This will prbbly be my lst post.", "pub_date": "2011-05-22T00:46:38", "slug": "another-post", "title": "Another Post"}' http://local.com:8000/api/v1/customobject/?format=json&username=custom_user&api_key=123456789012345
api_key是正确的,但在这种情况下是假的!
如前所述,get方法有效但帖子不起作用。
任何人都知道如何解决这个问题或有解决方法?
答案 0 :(得分:1)
我会尝试一些事情来调试这个问题。
1)尝试添加:allowed_methods = ['get', 'post', 'put']
2)在custom_authorization中添加print语句,以检查是否由于request.user.username不同而导致问题。
3)在APIKeyAuthentication的源代码中也做(2)。
这应该足以让您调试问题。 一旦完成,请记得删除打印语句!
祝你好运。
答案 1 :(得分:0)
这可能是由于已知的issue。在背景上tastypie目前将POST转换为PUT,并且正如Nikunj所指出的那样,因为在list_allowed_methods中你没有PUT,POST也被阻止了......不确定是否会导致你不应该在这种情况下获得方法。我建议在方法“is_authorized”中调试并检查那里发生了什么。