Удаление объекта в django и вызов API - PullRequest
0 голосов
/ 10 ноября 2010

Я пытаюсь удалить объект клиента в моей программе, а затем также удалить объект в activeCollab, используя предоставленный API. Я могу удалить объект, но получаю сообщение об ошибке 404 при вызове API. Я выполнил печать для c.id и получил правильный идентификатор, и если я заменил ': company_id' в операторе req фактическим идентификатором клиента, он работает.

Вот мой код для удаления:

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

1 Ответ

1 голос
/ 10 ноября 2010

Из документов видно, что :company_id предполагается заменить действительным идентификатором компании.Эта замена не произойдет автоматически.В настоящее время вы отправляете идентификатор компании в параметрах POST (чего 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 на фактическое значение, я думаю, что это лучшая ставка.

...