J'utilise AngularJS avec Python & Django et Django REST API. Il existe un fichier JSON créé par l'API REST et je dois y publier des données à l'aide de Angular $ http.post ().

J'ai besoin de savoir si c'est possible ou non.

Im obtenant principalement des erreurs 403 (Interdit) et 400 (MAUVAISE DEMANDE) sur le post.

$http({
       method: 'POST',
       url: '<JSON FILE URL>',
       data: $scope.tmpDataSet,
       headers: {'Content-Type': 'application/x-www-form-urlencoded'}

 }});

Ceci est ma méthode .post (). où je récupère les données d'un formulaire fait en angulaire et les stocke dans 'tmpDataSet'. Il est créé correctement et ne peut pas être stocké dans le tableau. Je ne suis tout simplement pas en mesure de l'écrire dans le fichier JSON.

La structure de mon fichier JSON est

{
    "count": 6,
    "next": null,
    "previous": null,
    "results": [
        {
            "name": "fff",
            "mobile_no": "fff",
            "email": "n@gmail.com",
            "message": "dfdf",
            "id": 1
        },
        {
            "name": "asd",
            "mobile_no": "0987654321",
            "email": "asd@gmail.com",
            "message": "no",
            "id": 2
        }
]

Si des détails supplémentaires sur le code sont nécessaires, veuillez commenter.

2
Akshay Saxena 19 juil. 2015 à 22:25

3 réponses

Meilleure réponse

Ce problème peut être résolu en ajoutant des jetons CSRF à l'application angulaire et en utilisant la fonction régulière $http.post() avec tous les paramètres.

app.config(function($httpProvider) {
    $httpProvider.defaults.xsrfCookieName = 'csrftoken';
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
});

Et,

$http.post('<URL>', item).error(function(data,status,headers,config){
            console.log('COULDNT POST!');
        }).success(function(data, status, headers, config){
            console.log('POSTED!');
        });
1
Nikhil Sikka 21 juil. 2015 à 16:40

À quoi ressemble $ scope.tmpDataSet? Puisque vous avez spécifié un Content-Type pour les URL encodées

   headers: {'Content-Type': 'application/x-www-form-urlencoded'}

Cela indique que les données reçues dans votre backend ne sont pas correctes car vous passez probablement un objet / tableau js comme corps de la demande. Cela expliquerait les 400 mauvaises demandes que vous recevez.

Les données encodées par URL doivent être sous la forme de

Key=Value+One&Key2=Value+Two

Où le + représente un espace.

Si vous utilisez jQuery, vous pouvez essayer d'utiliser $ .param () pour convertir des objets Java aux chaînes encodées en URL

Ex

$http({
   method: 'POST',
   url: '<JSON FILE URL>',
   data: $.param($scope.tmpDataSet),
   headers: {'Content-Type': 'application/x-www-form-urlencoded'}
 }});

Sinon, essayez cette réponse

https://stackoverflow.com/a/24964658/3371851

0
Community 23 mai 2017 à 12:13

Il y a quelque chose de bizarre dans cette déclaration:

Il existe un fichier JSON créé par l'API REST et je dois y publier des données à l'aide de Angular $ http.post ().

Si vous publiez des données sur Django, vous devez avoir une vue et un routage d'URL définis pour cette vue. Quelque chose comme:

def page(request):
    if request.POST:
          .... do stuff with POST data

Notez que vous devez POSTER des données dans une vue, s'il y a un simple fichier JSON sur votre système de fichiers, vous ne pouvez pas ajouter de données en y POSTANT json.

0
browskie 19 juil. 2015 à 19:42