Browse Source
			
			
			Wrote up proposed model design for database
			
				
		Wrote up proposed model design for database
	
		
	
			
				Have not actually created any models yet.master
				 7 changed files with 189 additions and 42 deletions
			
			
		- 
					85spotifyvis/migrations/0001_initial.py
 - 
					70spotifyvis/models.py
 - 
					42spotifyvis/static/spotifyvis/scripts/index.js
 - 
					14spotifyvis/templates/spotifyvis/index.html
 - 
					2spotifyvis/tests.py
 - 
					8spotifyvis/utils.py
 
@ -0,0 +1,85 @@ | 
				
			|||
# Generated by Django 2.0.5 on 2018-06-03 23:01 | 
				
			|||
 | 
				
			|||
from django.db import migrations, models | 
				
			|||
import django.db.models.deletion | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class Migration(migrations.Migration): | 
				
			|||
 | 
				
			|||
    initial = True | 
				
			|||
 | 
				
			|||
    dependencies = [ | 
				
			|||
    ] | 
				
			|||
 | 
				
			|||
    operations = [ | 
				
			|||
        migrations.CreateModel( | 
				
			|||
            name='Artist', | 
				
			|||
            fields=[ | 
				
			|||
                ('artist_id', models.CharField(max_length=30, primary_key=True, serialize=False)), | 
				
			|||
                ('name', models.CharField(max_length=50, unique=True)), | 
				
			|||
                ('genre', models.CharField(max_length=20)), | 
				
			|||
            ], | 
				
			|||
            options={ | 
				
			|||
                'verbose_name': 'Artist', | 
				
			|||
                'verbose_name_plural': 'Artists', | 
				
			|||
            }, | 
				
			|||
        ), | 
				
			|||
        migrations.CreateModel( | 
				
			|||
            name='Track', | 
				
			|||
            fields=[ | 
				
			|||
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | 
				
			|||
                ('track_id', models.CharField(max_length=30)), | 
				
			|||
                ('year', models.PositiveSmallIntegerField()), | 
				
			|||
                ('popularity', models.DecimalField(decimal_places=2, max_digits=2)), | 
				
			|||
                ('runtime', models.PositiveSmallIntegerField()), | 
				
			|||
                ('name', models.CharField(max_length=75)), | 
				
			|||
            ], | 
				
			|||
            options={ | 
				
			|||
                'verbose_name': 'Track', | 
				
			|||
                'verbose_name_plural': 'Tracks', | 
				
			|||
            }, | 
				
			|||
        ), | 
				
			|||
        migrations.CreateModel( | 
				
			|||
            name='User', | 
				
			|||
            fields=[ | 
				
			|||
                ('user_id', models.CharField(max_length=30, primary_key=True, serialize=False)), | 
				
			|||
                ('username', models.CharField(max_length=30)), | 
				
			|||
            ], | 
				
			|||
            options={ | 
				
			|||
                'verbose_name': 'User', | 
				
			|||
                'verbose_name_plural': 'Users', | 
				
			|||
            }, | 
				
			|||
        ), | 
				
			|||
        migrations.CreateModel( | 
				
			|||
            name='AudioFeatures', | 
				
			|||
            fields=[ | 
				
			|||
                ('track', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='spotifyvis.Track')), | 
				
			|||
                ('danceability', models.DecimalField(decimal_places=2, max_digits=2)), | 
				
			|||
                ('energy', models.DecimalField(decimal_places=2, max_digits=2)), | 
				
			|||
                ('loudness', models.DecimalField(decimal_places=2, max_digits=2)), | 
				
			|||
                ('speechiness', models.DecimalField(decimal_places=2, max_digits=2)), | 
				
			|||
                ('acousticness', models.DecimalField(decimal_places=2, max_digits=2)), | 
				
			|||
                ('instrumentalness', models.DecimalField(decimal_places=2, max_digits=2)), | 
				
			|||
                ('valence', models.DecimalField(decimal_places=2, max_digits=2)), | 
				
			|||
                ('tempo', models.DecimalField(decimal_places=2, max_digits=2)), | 
				
			|||
            ], | 
				
			|||
            options={ | 
				
			|||
                'verbose_name': 'AudioFeatures', | 
				
			|||
                'verbose_name_plural': 'AudioFeatures', | 
				
			|||
            }, | 
				
			|||
        ), | 
				
			|||
        migrations.AddField( | 
				
			|||
            model_name='track', | 
				
			|||
            name='artist', | 
				
			|||
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='spotifyvis.Artist'), | 
				
			|||
        ), | 
				
			|||
        migrations.AddField( | 
				
			|||
            model_name='track', | 
				
			|||
            name='users', | 
				
			|||
            field=models.ManyToManyField(to='spotifyvis.User'), | 
				
			|||
        ), | 
				
			|||
        migrations.AlterUniqueTogether( | 
				
			|||
            name='track', | 
				
			|||
            unique_together={('track_id', 'artist')}, | 
				
			|||
        ), | 
				
			|||
    ] | 
				
			|||
@ -0,0 +1,42 @@ | 
				
			|||
document.getElementById("login-btn").addEventListener("click", function() { | 
				
			|||
    let httpRequest = new XMLHttpRequest(); | 
				
			|||
 | 
				
			|||
    /* | 
				
			|||
     * Handler for the response | 
				
			|||
     */ | 
				
			|||
    httpRequest.onreadystatechange = function() { | 
				
			|||
        if (httpRequest.readyState === XMLHttpRequest.DONE) { | 
				
			|||
            if (httpRequest.status === 200) { | 
				
			|||
                // hide the login button
 | 
				
			|||
                document.getElementById('login').setAttribute("display", "none"); | 
				
			|||
 | 
				
			|||
                let responseData = JSON.parse(httpRequest.responseText); | 
				
			|||
                let dataList = document.getElementById("data-list"); | 
				
			|||
                 | 
				
			|||
 | 
				
			|||
                for (let key in responseData) { | 
				
			|||
                    let newLi = document.createElement("li"); | 
				
			|||
                    let innerList = document.createElement("ul"); | 
				
			|||
                     | 
				
			|||
                    let dataLabel = document.createElement("li"); | 
				
			|||
                    dataLabel.innerText = key; | 
				
			|||
 | 
				
			|||
                    let dataValue = document.createElement("li"); | 
				
			|||
                    dataValue.innerText = responseData[key]; | 
				
			|||
 | 
				
			|||
                    innerList.appendChild(dataLabel); | 
				
			|||
                    innerList.appendChild(dataValue); | 
				
			|||
 | 
				
			|||
                    newLi.appendChild(innerList); | 
				
			|||
                    dataList.appendChild(newLi); | 
				
			|||
                } | 
				
			|||
            } else { | 
				
			|||
                alert("There was a problem with the login request, please try again!"); | 
				
			|||
            } | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    httpRequest.open('GET', '/login', true); | 
				
			|||
    httpRequest.send(); | 
				
			|||
}); | 
				
			|||
 | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue