Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Django REST Frameworkに再挑戦 その20 Base APIView for User Login

概要

Django REST Frameworkに再挑戦 その20 Base APIView for User Login

参考サイト

www.django-rest-framework.org

www.codingforentrepreneurs.com

Base APIView for User Login

  • UserLoginSerializerというclassを新たに作成する。
class UserLoginSerializer(ModelSerializer):
    token = CharField(allow_blank=True, read_only=True)
    username = CharField()
    email = EmailField(label='Email Address')
    class Meta:
        model = User
        fields = [
            'username',
            'email',
            'password',
            'token',
        ]
        extra_kwargs = {"password":
                            {"write_only": True}
                            }

    def validate(self, data):
    #     email = data['email']
    #     user_qs = User.objects.filter(email=email)
    #     if user_qs.exists():
    #         raise ValidationError("すでにこちらのアドレスは登録されています。")
        return data
  • accounts/api/views.pyにLoginViewを作成する。
class UserLoginAPIView(APIView):
    permission_classes = [AllowAny]
    serializer_class = UserLoginSerializer

    def post(self, request, *args, **kwargs):
        data = request.data # request.POST
        serializer = UserLoginSerializer(data=data)
        if serializer.is_valid(raise_exception=True):
            new_data = serializer.data
            return Response(new_data, status=HttP_200_OK) # ここのresponseは、rest_frameworkのAPIなので注意。
        return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)