Browse Source

Setup django_tables2 for user history table

master
Kevin Mok 6 years ago
parent
commit
2912977992
  1. 2
      api/models.py
  2. 4
      api/views.py
  3. 4
      graphs/templates/graphs/user_history.html
  4. 28
      graphs/utils.py
  5. 9
      graphs/views.py
  6. 3
      requirements.txt
  7. 1
      spotifyvis/settings.py
  8. 13
      static/css/dark_bg.css

2
api/models.py

@ -102,7 +102,7 @@ class History(models.Model):
track = models.ForeignKey(Track, on_delete=models.CASCADE)
def __str__(self):
return (self.user, self.time, self.track)
return " - ".join((str(self.user), str(self.timestamp), str(self.track)))
# }}} #

4
api/views.py

@ -19,6 +19,8 @@ from dateutil.parser import parse
# }}} imports #
# constants {{{ #
USER_TRACKS_LIMIT = 50
HISTORY_LIMIT = 50
ARTIST_LIMIT = 50
@ -31,6 +33,8 @@ HISTORY_ENDPOINT = 'https://api.spotify.com/v1/me/player/recently-played'
console_logging = True
# console_logging = False
# }}} constants #
# parse_library {{{ #
def parse_library(request, user_secret):

4
graphs/templates/graphs/user_history.html

@ -1,5 +1,6 @@
<!DOCTYPE html>
{% load static %}
{% load render_table from django_tables2 %}
<html lang="en">
<head>
<meta charset="UTF-8">
@ -8,6 +9,7 @@
<link rel="stylesheet" href="{% static 'css/dark_bg.css' %}">
</head>
<body>
<h1>Your Listening History</h1>
<h1>{{ user_id }}'s Listening History</h1>
{% render_table user_history_table %}
</body>
</html>

28
graphs/utils.py

@ -1,3 +1,14 @@
import django_tables2 as tables
from pprint import pprint
from login.models import User
from api.models import History
class HistoryTable(tables.Table):
class Meta:
model = History
template_name = 'django_tables2/bootstrap.html'
def get_secret_context(user_secret):
"""Return user_secret in context for graph pages.
@ -15,6 +26,19 @@ def get_user_history(user_secret):
:returns: list of lists of song history plus information.
"""
# TODO: pass back user id as well?
pass
user_id = get_user_id_from_secret(user_secret)
history_fields = [field.name for field in History._meta.get_fields()]
user_history = History.objects.filter(user__exact=user_id).order_by('-timestamp')
user_history_table = HistoryTable(user_history)
return { 'user_id': user_id,
'history_fields': history_fields,
'user_history_table': user_history_table, }
def get_user_id_from_secret(user_secret):
"""Retrieve corresponding user_id for user_secret.
:user_secret:
:returns: user_id
"""
return User.objects.get(secret=user_secret).id

9
graphs/views.py

@ -6,12 +6,13 @@ import requests
import os
import urllib
import secrets
import pprint
from pprint import pprint
import string
from datetime import datetime
from django.shortcuts import render, redirect
from .utils import *
from django_tables2 import RequestConfig
# }}} imports #
@ -48,6 +49,8 @@ def display_history_table(request, user_secret):
:param user_secret: user secret used for identification
:return: renders the user history page
"""
return render(request, "graphs/user_history.html",
get_secret_context(user_secret))
context = get_secret_context(user_secret)
context.update(get_user_history(user_secret))
RequestConfig(request).configure(context['user_history_table'])
return render(request, "graphs/user_history.html", context)

3
requirements.txt

@ -3,15 +3,16 @@ certifi==2018.4.16
chardet==3.0.4
Django==2.0.5
djangorestframework==3.8.2
django-tables2==2.0.2
idna==2.6
isort==4.3.4
lazy-object-proxy==1.3.1
mccabe==0.6.1
psycopg2-binary==2.7.4
pylint==1.8.4
python-dateutil==2.7.5
pytz==2018.4
requests==2.18.4
six==1.11.0
urllib3==1.22
wrapt==1.10.11
python-dateutil==2.7.5

1
spotifyvis/settings.py

@ -40,6 +40,7 @@ INSTALLED_APPS = [
'login.apps.LoginConfig',
'api.apps.ApiConfig',
'graphs.apps.GraphsConfig',
'django_tables2',
]
MIDDLEWARE = [

13
static/css/dark_bg.css

@ -1,8 +1,15 @@
body {
background-color: #1e1e1e;
/* dark grey */
background-color: #1e1e1e;
}
h1,p {
color: grey;
h1 {
/* light grey */
color: #e5e5e5;
}
p,td {
/* light-dark grey */
color: #b2b2b2;
}
Loading…
Cancel
Save