2013-05-02 2 views
0

En essayant de créer un nouveau modèle avec une API de repos en utilisant Django Rest Framework.Backbone Créer un modèle avec Django Rest Framework

Ceci est mon sérialiseur:

class FooSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = Foo 

Ceci est mon view.py

@api_view(['POST', 'GET','DELETE','OPTIONS']) 
def foos(request): 
    """ 
    API endpoint to create, delete and get foos 
    """ 
    authentication_classes = (authentication.TokenAuthentication,) 
    permission_classes = (permissions.IsAuthenticated,) 

    model = Foo 
    serializer_class = FooSerializer 

    if request.method == "POST": 
     data = JSONParser().parse(request) 
     serializer = FooSerializer(data=data) 
     if serializer.is_valid(): 
      serializer.save() 
      return JSONResponse(serializer.data, status=201) 
     else: 
      return JSONResponse(serializer.errors, status=400) 

    return Response(serializer.data) 

Ensuite, à mon avis fédérateur:

 foo = new Foo 
      name:'Bla di bla di' 
     foo.save() 

Notant se produit à l'exception des OPTIONS pour ne , il n'y a pas de POST.

failing OPTIONS

OPTIONS http://127.0.0.1:8080/api/foo/ 

Je ne sais pas quoi faire, cela ne se produit pas si je laisse le contentType: « application/json » une partie du poste (lorsque vous faites un poste manuel)

Cela fonctionne avec CURL dans mon terminal.

Dans mon inspecteur chrome> Réseau J'obtiens ceci:

Request URL:http://127.0.0.1:8080/api/foo/ 
Request Headersview source 
Access-Control-Request-Headers:accept, origin, authorization, content-type 
Access-Control-Request-Method:POST 
Cache-Control:no-cache 
Origin:http://localhost:8000 
Pragma:no-cache 

demande et réponse est vide.

EDIT

je me suis tourné du serveur avec le reste api et exactement la même chose se passe! Donc cela me suffit d'une chose, ce n'est rien à voir avec le serveur. Doit être le truc d'AJAX.

Im complètement confus :-(

+0

Vous pouvez étendre à ce sujet: « Le poste échoue brusquement avec les options ne » - ce n'est pas très clair ce que tu veux dire. –

+0

Je veux dire que OPTIONS échoue, et il s'arrête. Aucun commentaire n'a été fait – Harry

+0

Pourquoi commentez-vous si vous n'avez aucun commentaire constructif? – Harry

Répondre

1

Lorsque vous effectuez une demande inter-domaines, il est normal de faire un appel OPTIONS avant de faire un POST.

Si les options appellent cela arrive, mais pas POST suit , cause la plus probable est l'échec COR

Vérifiez la réponse du serveur - est-il renvoyer les en-têtes corrects

Vous devez 3:.?

'Access-Control-Allow-Origin' 'Access-Control-Allow-Méthodes'
'Access-Control-Allow-têtes'

Ceux-ci doivent correspondre à votre demande.

Voir cette réponse pour solution rapide: https://stackoverflow.com/a/3520073

Ou cette page pour arrière-plan + explication complète: http://www.html5rocks.com/en/tutorials/cors/

Questions connexes