Setup django_tables2 for user history table
This commit is contained in:
@@ -102,7 +102,7 @@ class History(models.Model):
|
|||||||
track = models.ForeignKey(Track, on_delete=models.CASCADE)
|
track = models.ForeignKey(Track, on_delete=models.CASCADE)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return (self.user, self.time, self.track)
|
return " - ".join((str(self.user), str(self.timestamp), str(self.track)))
|
||||||
|
|
||||||
# }}} #
|
# }}} #
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ from dateutil.parser import parse
|
|||||||
|
|
||||||
# }}} imports #
|
# }}} imports #
|
||||||
|
|
||||||
|
# constants {{{ #
|
||||||
|
|
||||||
USER_TRACKS_LIMIT = 50
|
USER_TRACKS_LIMIT = 50
|
||||||
HISTORY_LIMIT = 50
|
HISTORY_LIMIT = 50
|
||||||
ARTIST_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 = True
|
||||||
# console_logging = False
|
# console_logging = False
|
||||||
|
|
||||||
|
# }}} constants #
|
||||||
|
|
||||||
# parse_library {{{ #
|
# parse_library {{{ #
|
||||||
|
|
||||||
def parse_library(request, user_secret):
|
def parse_library(request, user_secret):
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
{% load static %}
|
{% load static %}
|
||||||
|
{% load render_table from django_tables2 %}
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
@@ -8,6 +9,7 @@
|
|||||||
<link rel="stylesheet" href="{% static 'css/dark_bg.css' %}">
|
<link rel="stylesheet" href="{% static 'css/dark_bg.css' %}">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>Your Listening History</h1>
|
<h1>{{ user_id }}'s Listening History</h1>
|
||||||
|
{% render_table user_history_table %}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -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):
|
def get_secret_context(user_secret):
|
||||||
"""Return user_secret in context for graph pages.
|
"""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.
|
:returns: list of lists of song history plus information.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# TODO: pass back user id as well?
|
user_id = get_user_id_from_secret(user_secret)
|
||||||
pass
|
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
|
||||||
|
|||||||
@@ -6,12 +6,13 @@ import requests
|
|||||||
import os
|
import os
|
||||||
import urllib
|
import urllib
|
||||||
import secrets
|
import secrets
|
||||||
import pprint
|
from pprint import pprint
|
||||||
import string
|
import string
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from django.shortcuts import render, redirect
|
from django.shortcuts import render, redirect
|
||||||
from .utils import *
|
from .utils import *
|
||||||
|
from django_tables2 import RequestConfig
|
||||||
|
|
||||||
# }}} imports #
|
# }}} imports #
|
||||||
|
|
||||||
@@ -48,6 +49,8 @@ def display_history_table(request, user_secret):
|
|||||||
:param user_secret: user secret used for identification
|
:param user_secret: user secret used for identification
|
||||||
:return: renders the user history page
|
:return: renders the user history page
|
||||||
"""
|
"""
|
||||||
return render(request, "graphs/user_history.html",
|
context = get_secret_context(user_secret)
|
||||||
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,15 +3,16 @@ certifi==2018.4.16
|
|||||||
chardet==3.0.4
|
chardet==3.0.4
|
||||||
Django==2.0.5
|
Django==2.0.5
|
||||||
djangorestframework==3.8.2
|
djangorestframework==3.8.2
|
||||||
|
django-tables2==2.0.2
|
||||||
idna==2.6
|
idna==2.6
|
||||||
isort==4.3.4
|
isort==4.3.4
|
||||||
lazy-object-proxy==1.3.1
|
lazy-object-proxy==1.3.1
|
||||||
mccabe==0.6.1
|
mccabe==0.6.1
|
||||||
psycopg2-binary==2.7.4
|
psycopg2-binary==2.7.4
|
||||||
pylint==1.8.4
|
pylint==1.8.4
|
||||||
|
python-dateutil==2.7.5
|
||||||
pytz==2018.4
|
pytz==2018.4
|
||||||
requests==2.18.4
|
requests==2.18.4
|
||||||
six==1.11.0
|
six==1.11.0
|
||||||
urllib3==1.22
|
urllib3==1.22
|
||||||
wrapt==1.10.11
|
wrapt==1.10.11
|
||||||
python-dateutil==2.7.5
|
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ INSTALLED_APPS = [
|
|||||||
'login.apps.LoginConfig',
|
'login.apps.LoginConfig',
|
||||||
'api.apps.ApiConfig',
|
'api.apps.ApiConfig',
|
||||||
'graphs.apps.GraphsConfig',
|
'graphs.apps.GraphsConfig',
|
||||||
|
'django_tables2',
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
|||||||
@@ -1,8 +1,15 @@
|
|||||||
body {
|
body {
|
||||||
background-color: #1e1e1e;
|
/* dark grey */
|
||||||
|
background-color: #1e1e1e;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1,p {
|
h1 {
|
||||||
color: grey;
|
/* light grey */
|
||||||
|
color: #e5e5e5;
|
||||||
|
}
|
||||||
|
|
||||||
|
p,td {
|
||||||
|
/* light-dark grey */
|
||||||
|
color: #b2b2b2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user