2017-02-01 3 views
0

Je travaille sur la création d'une application native réagissant avec un backend de framework de repos django. J'ai créé le ViewSet d'inscription et ont été en mesure d'enregistrer avec succès un utilisateur de l'extrémité avant en utilisant les éléments suivants:Vérifiez la connexion avec l'API de repos Django et réagissez au frontal natif

class UserViewSet(viewsets.ModelViewSet): 
    queryset = User.objects.all() 
    serializer_class = UserSeralizer 

J'ai créé un autre ViewSet pour vérifier l'e-mail et mot de passe de l'utilisateur comme suit:

class LoginViewSet(viewsets.ModelViewSet): 
    queryset = User.objects.all() 
    serializer_class = LoginSeralizer 

@detail_route(['POST']) 
def login_user(self,request, pk=None): 
    if request.method == "POST": 
     email = request.POST.get("email", False) 
     password = request.POST.get("password", False) 
     user = authenticate(email=email, password=password) 
     if user is not None: 
      if user.is_active: 
       return Response(user.data, status=status.HTTP_200_OK) 
      else: 
       return Response(user.error, status=status.HTTP_400_BAD_REQUEST) 
     else: 
      return Response(user.error, status=status.HTTP_400_BAD_REQUEST) 

La méthode detail_route n'est pas appelée lorsque j'essaie d'accéder à l'URL depuis le frontal. Je reçois une erreur 400 indiquant que l'utilisateur a déjà été créé. Suis-je sur la bonne voie? Quelles modifications dois-je apporter à la méthode detail_route pour qu'elle soit appelée depuis le frontal lorsque l'URL est passée dans la méthode de récupération de l'application native de réaction?

Le reste des fichiers du projet django sont les suivantes: Le url.py:

from django.contrib import admin 
from django.conf.urls import url, include 
from rest_framework import routers 
router = routers.DefaultRouter() 
#makes sure that the API endpoints work 
router.register(r'api/users', views.UserViewSet) 
router.register(r'api/login', views.LoginViewSet) 
admin.autodiscover() 
urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^', include(router.urls)), 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),] 

Le serializer.py:

class UserSeralizer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = User 
     fields = ('username', 'email', 'password') 


class LoginSeralizer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = User 
     fields = ('email', 'password') 

Répondre