2010-11-10 14 views
0

Je tente de supprimer un objet client dans mon programme, puis de supprimer l'objet dans activeCollab à l'aide de l'API fournie. Je peux supprimer l'objet mais je continue à recevoir une erreur 404 quand il appelle l'API. J'ai fait un print pour c.id et j'obtiens le bon identifiant, et si je remplace ': company_id' dans l'instruction req par l'identifiant du client, cela fonctionne.Suppression d'un objet dans l'appel django et l'API

Voici mon code pour la suppression:

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/') 

Merci à tous.

Oh voici le lien vers la documentation de l'API pour la suppression: http://www.activecollab.com/docs/manuals/developers/api/companies-and-users

+0

Ma première estimation est la clé dans 'params' -' company [id] '- ne correspond pas à la chaîne dans l'appel' Request' ': company_id'. –

+0

l'espace était juste de copier et coller, pas d'espace dans mon code – TheLifeOfSteve

Répondre

1

De la documentation, il semble que :company_id est censé être remplacé par l'identifiant de l'entreprise réelle. Ce remplacement ne se fera pas automatiquement. Actuellement, vous envoyez l'ID de l'entreprise dans les paramètres POST (que l'API ne s'attend pas) et vous envoyez la valeur littérale ':company_id' dans la chaîne de requête.

Essayez quelque chose comme:

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) 
    ) 

Bien sûr, parce que vous ciblez ce script api.php, je ne peux pas dire si ce script est censé faire un peu de remplacement magique. Mais étant donné que cela fonctionne quand vous remplacez manuellement le :company_id avec la valeur réelle, c'est le meilleur pari, je pense.

+0

merci beaucoup @Ian! Je ne suis pas allé mot pour mot mais j'ai pris votre idée générale et cela a fonctionné comme un charme. Merci encore! – TheLifeOfSteve