Djangoroidの奮闘記

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

Django REST Frameworkに再挑戦 その21 UserLogin API Validation

概要

Django REST Frameworkに再挑戦 その21 UserLogin API Validation

参考サイト

www.django-rest-framework.org

www.codingforentrepreneurs.com

UserLogin API Validation

  • accounts/api/serializers.pyのUserLoginSerializer に、validationをつける。
class UserLoginSerializer(ModelSerializer):
...

    def validate(self, data):
        user_obj = None
        email = data.get("email", None)
        username = data.get("email", None)
        password = data["password"]
        if not email or not username:
            raise ValidationError("A username or email is required to login.")

        user = User.objects.filter(
                Q(email=email) |
                Q(username=username)
            ).distinct()

        if user.exists() and user.count() == 1:
            user_obj = user.first()
        else:
            raise ValidationError("ユーザー、emailが存在しません。")

        if  user_obj:
            if not user_obj.check_password(password):
                raise ValidationError("パスワードが正しくありません。")

        data["token"] = "SOME RANDOM TOKEN"

        return data
  • ただ、このvalidationでは、emailが登録されてない人たちがリストとして表示されてしまうので、以下の一文を差し込む。これは、nullと、"(空欄)"のリストを除くという意味だと思う。
user = user.exclude(email__isnull=True).exclude(email__iexact='')
  • これでログイン実装完了か〜、この辺は、ライブラリの利用が必要なきがするな。