2017-02-01 11 views
0

私はdjango restフレームワークバックエンドで反応するネイティブアプリを構築しています。私は登録ビューセットを作成しているし、成功した、以下のものを使用して、フロントエンドからユーザーを登録することができました:Django rest APIでログインを確認し、ネイティブフロントエンドに反応してください。

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

私は次のようにユーザーのメールアドレスとパスワードを確認するために、別のビューセットを作成しました:

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) 

フロントエンドからURLにアクセスしようとすると、detail_routeメソッドが呼び出されていません。私は、ユーザーが既に作成されていると言って、間違ったレスポンス400エラーを受け取ります。正しい軌道にいるのですか? detail_routeメソッドにどのような変更を加えて、URLがリアクションネイティブアプリのfetchメソッドに渡されたときにフロントエンドから呼び出されるようにしますか?

Djangoプロジェクト内のファイルの残りの部分は次のとおりです。 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')),] 

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

答えて

0

あなたはLoginViewSet/LoginSeralizerとUserViewSetを定義しています/ UserSeralizerは実質的に同じです。ログインすると実際にユーザーを作成します。

RESTフレームワークによる認証方法については、 http://www.django-rest-framework.org/api-guide/authentication/

関連する問題