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')