2017-06-30 3 views
0

Nous devons implémenter l'API sur le site, choisir le framework REST. Coupe automatique fait par jeton (rest_framework.authtoken)Django REST framework

de settings.py

REST_FRAMEWORK = { 
     'DEFAULT_PERMISSION_CLASSES': (
         'Rest_framework.permissions.IsAdminUser', 
    ), 
     'DEFAULT_AUTHENTICATION_CLASSES': (
         'Rest_framework.authentication.TokenAuthentication', 
        
    ), 

} 

view.py

@api_view(['GET', 'POST']) 
def task_list(request): 

    if request.method == 'GET': 
     tasks = Task.objects.all() 
     serializer = TaskSerializer(tasks, many=True) 
     return Response(serializer.data) 

    elif request.method == 'POST': 
     serializer = TaskSerializer(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) 

donne un message d'erreur

"Detail": "Authentication credentials were not provided." 

Comment corriger cette erreur et empêcher la méthode GET

+0

vous pouvez mettre un peu si logique dans la vue de 'request.user.is_authenticated' et éviter d'entrer dans le bloc GET, etc ... cette façon –

Répondre

0

Pour TokenAuthentication vous devez définir l'en-tête de la requête http Authorization: Token <user_token>.

Si vous voulez une vue d'être autorisé pour tous les utilisateurs, vous pouvez spécifier l'autorisation classe AllowAny pour ce point de vue:

@api_view(['GET']) 
@permission_classes((AllowAny,)) 
def example_view(request, format=None): 
    content = { 
     'status': 'request was permitted' 
    } 
    return Response(content) 

Vous pouvez générer jeton valide en utilisant obtain_auth_token vue. Ajoutez ceci à votre urls.py:

from rest_framework.authtoken import views 
urlpatterns += [ 
    url(r'^api-token-auth/', views.obtain_auth_token) 
] 
+0

je ne ai pas besoin 'AllowAny', j'ai besoin d'accéder à Token – Sonfire

+0

@Sonfire vous devez générer un jeton? Je mets à jour ma réponse, vérifie-la. – neverwalkaloner

+0

J'ai un jeton généré. Je le présente dans l'en-tête de 'token: ******'. Donne un message d'erreur – Sonfire