Exemplo n.º 1
0
class UserSerializer(serializers.ModelSerializer):
    """
    User serializer
    """

    if 'email' in drfr_settings.USER_FIELDS:
        email = serializers.EmailField(validators=[
            UniqueValidator(queryset=get_all_users(),
                            message=_('User with this email already exists.'))
        ])

    if 'username' in drfr_settings.USER_FIELDS:
        username = serializers.CharField(validators=[
            UniqueValidator(queryset=get_all_users(),
                            message=_(
                                'User with this username already exists.'))
        ])

    if enable_has_password():
        has_password = serializers.SerializerMethodField()

    class Meta:
        model = get_user_model()

        # Check to response has password field in the case enable Facebook or Google login
        fields = drfr_settings.USER_FIELDS + (
            'has_password', ) if enable_has_password(
            ) else drfr_settings.USER_FIELDS
        read_only_fields = drfr_settings.USER_READ_ONLY_FIELDS
        extra_kwargs = {'password': {'write_only': True}}

    def get_has_password(self, user):
        """
        Custom response field to check user has password or not
        """

        return bool(user.password)
Exemplo n.º 2
0
class ProfileView(RetrieveUpdateAPIView):
    """
    Get update user profile information
    """

    permission_classes = import_string_list(
        drfr_settings.PROFILE_PERMISSION_CLASSES)
    serializer_class = import_string(drfr_settings.PROFILE_SERIALIZER)
    queryset = get_all_users()

    def get_object(self):
        return self.request.user

    def update(self, request, *args, **kwargs):
        """
        Custom update user profile
        """

        # Remove write only fields when update profile
        for field in drfr_settings.USER_WRITE_ONLY_FIELDS:

            if field in request.data.keys():

                # Make it editable
                request.data._mutable = True

                request.data.pop(field)

                # Disable editable
                request.data._mutable = False

        # Support the case user can change password in profile if
        # USER_WRITE_ONLY_FIELDS not contain password field
        if 'password' in request.data.keys():
            request.data._mutable = True
            self.request.user.set_password(request.data.pop('password')[0])
            self.request.user.save()
            request.data._mutable = False

        return super(ProfileView, self).update(request, *args, **kwargs)
Exemplo n.º 3
0
 def test_get_all_users(self):
     all_users = users.get_all_users()
     self.assertEqual(all_users.count(), 1)
     self.assertEqual(all_users.first(), self.user)