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