From a4a00458af601f4de171dabd57c065c18a20e613 Mon Sep 17 00:00:00 2001 From: Kevin Mok Date: Wed, 7 Nov 2018 17:48:11 -0500 Subject: [PATCH] Able to upload history onto server (#57) --- .gitignore | 1 + graphs/templates/graphs/user_history.html | 2 +- graphs/views.py | 9 +++++++++ login/forms.py | 8 ++++++++ login/models.py | 5 +++++ login/templates/login/scan.html | 5 +++++ login/urls.py | 1 + login/views.py | 21 ++++++++++++++++++++- spotifyvis/settings.py | 3 +++ 9 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 login/forms.py diff --git a/.gitignore b/.gitignore index c492bbd..73bb973 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ api-keys.sh Pipfile *.txt scrap.py +media/history/* diff --git a/graphs/templates/graphs/user_history.html b/graphs/templates/graphs/user_history.html index 8d41a06..39c2e27 100644 --- a/graphs/templates/graphs/user_history.html +++ b/graphs/templates/graphs/user_history.html @@ -10,7 +10,7 @@

{{ user_id }}'s Listening History

- Export CSV + Export {% render_table user_history_table %} diff --git a/graphs/views.py b/graphs/views.py index ff0bea5..404eaac 100644 --- a/graphs/views.py +++ b/graphs/views.py @@ -45,6 +45,8 @@ def display_features_graphs(request, user_secret): return render(request, "graphs/features_graphs.html", get_secret_context(user_secret)) +# HistoryList {{{ # + class HistoryList(ExportMixin, SingleTableView): """Create table with list of song history.""" model = History @@ -52,6 +54,8 @@ class HistoryList(ExportMixin, SingleTableView): context_table_name = 'user_history_table' template_name = 'graphs/user_history.html' + # overridden methods {{{ # + def get_table_kwargs(self): return { 'exclude': ('id', 'user', 'track', 'track_id', 'iso_timestamp', ) } @@ -76,3 +80,8 @@ class HistoryList(ExportMixin, SingleTableView): ) return exporter.response(filename=self.get_export_filename(export_format)) + + # }}} overridden methods # + +# }}} HistoryList # + diff --git a/login/forms.py b/login/forms.py new file mode 100644 index 0000000..3a70ea8 --- /dev/null +++ b/login/forms.py @@ -0,0 +1,8 @@ +from django import forms +from .models import HistoryUpload + +class HistoryUploadForm(forms.ModelForm): + class Meta: + model = HistoryUpload + fields = ('user_id', 'document', ) + # widgets = { 'user_id': forms.HiddenInput() } diff --git a/login/models.py b/login/models.py index aa04baf..1bc0474 100644 --- a/login/models.py +++ b/login/models.py @@ -20,3 +20,8 @@ class User(models.Model): def __str__(self): return self.id + +class HistoryUpload(models.Model): + user_id = models.ForeignKey(User, on_delete=models.CASCADE) + document = models.FileField(upload_to='history/') + uploaded_at = models.DateTimeField(auto_now_add=True) diff --git a/login/templates/login/scan.html b/login/templates/login/scan.html index e0c6dce..7ea75a4 100644 --- a/login/templates/login/scan.html +++ b/login/templates/login/scan.html @@ -24,5 +24,10 @@ Scan History +
+ {% csrf_token %} + {{ form.as_p }} + +
diff --git a/login/urls.py b/login/urls.py index 75c29e8..120cf7f 100644 --- a/login/urls.py +++ b/login/urls.py @@ -9,4 +9,5 @@ urlpatterns = [ path('callback', callback, name='callback'), # path('user/', user_home, name='user_home'), path('admin_graphs', admin_graphs, name='admin_graphs'), + path('upload_history', upload_history, name='upload_history'), ] diff --git a/login/views.py b/login/views.py index 649ced2..8872993 100644 --- a/login/views.py +++ b/login/views.py @@ -11,6 +11,7 @@ from django.shortcuts import render, redirect from django.http import HttpResponseBadRequest from .models import * from .utils import * +from .forms import HistoryUploadForm # }}} imports # @@ -78,7 +79,10 @@ def callback(request): request.session['user_id'] = user_obj.id request.session['user_secret'] = user_obj.secret - return render(request, 'login/scan.html', get_user_context(user_obj)) + context = get_user_context(user_obj) + context['form'] = HistoryUploadForm() + + return render(request, 'login/scan.html', context) # }}} callback # @@ -97,3 +101,18 @@ def admin_graphs(request): return render(request, 'graphs/logged_in.html', get_user_context(user_obj)) # }}} admin_graphs # + +def upload_history(request): + if request.method == 'POST': + form = HistoryUploadForm(request.POST, request.FILES) + form.fields['user_id'].initial = User.objects.get(id=request.session['user_id']) + if form.is_valid(): + form.save() + + # Redirect to the document list after POST + return redirect('graphs:display_history_table') + else: + form = HistoryUploadForm() + + # return redirect('graphs:display_history_table') + return render(request, 'login/scan.html', context) diff --git a/spotifyvis/settings.py b/spotifyvis/settings.py index b8db2ef..4c85115 100644 --- a/spotifyvis/settings.py +++ b/spotifyvis/settings.py @@ -130,3 +130,6 @@ STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), ] + +MEDIA_URL = '/media/' +MEDIA_ROOT = os.path.join(BASE_DIR, 'media')