2016-11-18 2 views
0

Je travaille actuellement sur un projet Django. Lorsque j'envoie une requête GET en utilisant CURL, cela fonctionne bien, mais en cas de requête POST, cela me donne 500 erreurs internes. Je pense que cela a quelque chose à voir avec le jeton csrf et je n'ai aucune idée de ce qu'il faut faire avec csrf ou comment csrf résoudra mon erreur.Méthode POST de Django donnant 500 erreur de serveur interne

J'ai aussi mis DEBUG = False et allowed_hosts = [ '*'] dans settings.py, mais aussi je reçois la même erreur:

Erreur de serveur (500)

Voici un morceau de mon code:

urls.py

from django.conf.urls import patterns, url 

urlpatterns = patterns(
    'project.views', 
    url(r'^users/$', 'userList', name='userList'), 
    url(r'^users/(?P<pk>[0-9]+)$', 'userDetail', name='userDetail'), 
) 

Cette fonction de vue, py

@api_view(['GET', 'POST']) 

def userList(request): 
    if request.method == 'GET': 
     user = users.objects.all() 
     serializer = UsersSerializer(user, many=True) 
     return Response(serializer.data) 

    elif request.method == 'POST': 
     serializer = UsersSerializer(data=request.DATA) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data, status=status.HTTP_201_CREATED) 
     else: 
      return Response(
      serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

C'est la commande que je utilise dans le terminal:

boucle -X POST http://127.0.0.1:8000/users/ -d '{ "nom d'utilisateur": "root", "email": "[email protected]"}' -H "Content-type: application/json"

Django numéro de version: 1.9

en POSTMAN Je reçois l'erreur:

{ "nom d'utilisateur": [ "Ce champ est obligatoire." ], "email": [ "Ce champ est obligatoire." ] }

+0

Avez-vous accès aux journaux du serveur? Que dit le retraçage? –

+0

Si vous définissez DEBUG sur True, vous verrez l'erreur complète. Ça dit quoi? –

+0

Lorsque j'ai utilisé POSTMAN, il m'a donné une erreur: { "detail": "Type de support non pris en charge" text/plain; charset = UTF-8 \ "in request." } – neerav94

Répondre

0

devrait-il pas être data=request.data (minuscules data)?

+0

Dans une fonction d'affichage Django, les données de publication sont généralement dans 'request.POST'. –

+0

Non, ça ne marche pas. J'ai essayé à la fois data = request.data et request.post, mais les deux ne semblent pas fonctionner. – neerav94

0

En fait, les données ne devraient-elles pas être affectées à une publication de ce type?

serializer = UsersSerializer(data=request.POST) 
+0

J'ai essayé mais pas de chance. – neerav94