0

我正在尝试删除程序中的客户端对象,然后使用提供的 API 删除 activeCollab 中的对象。我可以删除该对象,但在调用 API 时我不断收到 404 错误。我打印了 c.id 并且得到了正确的 ID,如果我将 req 语句中的 ':company_id' 替换为客户端的实际 ID,它就可以工作。

这是我的删除代码:

def deleteClient(request, client_id):
   c = get_object_or_404(Clients, pk = client_id)
   #adding the params for the request to the aC API
   params = urllib.urlencode({
     'submitted':'submitted',
     'company[id]': c.id,   
   })
   #make the request
   req = urllib2.Request("http://website_url/public/api.php?path_info=/people /:company_id/delete&token=XXXXXXXXXXXXXXXXXXXX", params)
   f = urllib2.urlopen(req)
   print f.read()
   c.delete()
   return HttpResponseRedirect('/clients/')

感谢大家。

哦,这里是删除 API 文档的链接: http ://www.activecollab.com/docs/manuals/developers/api/companies-and-users

4

1 回答 1

1

从文档看来,:company_id它应该被实际的公司 ID 替换。这种替换不会自动发生。目前,您在 POST 参数中发送公司 ID(API 不期望),并且':company_id'在查询字符串中发送文字值。

尝试类似:

url_params=dict(path_info="/people/%s/delete" % c.id, token=MY_API_TOKEN)
data_params=dict(submitted=submitted)
req = urllib2.Request(
    "http://example.com/public/api.php?%s" % urllib.urlencode(url_params), 
    urllib.urlencode(data_params)
    )

当然,因为你的目标是这个api.php脚本,我不知道那个脚本是否应该做一些神奇的替换。但考虑到它在您手动替换:company_id实际值时有效,我认为这是最好的选择。

于 2010-11-10T20:02:10.150 回答