Voting update
Nu met 100% meer mogelijkheid tot stemmen. Top.
This commit is contained in:
@@ -24,6 +24,7 @@ INSTALLED_APPS = [
|
|||||||
'django.contrib.sessions',
|
'django.contrib.sessions',
|
||||||
'django.contrib.messages',
|
'django.contrib.messages',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
|
'django_htmx',
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
@@ -34,6 +35,7 @@ MIDDLEWARE = [
|
|||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
|
'django_htmx.middleware.HtmxMiddleware',
|
||||||
]
|
]
|
||||||
|
|
||||||
ROOT_URLCONF = 'muzak.urls'
|
ROOT_URLCONF = 'muzak.urls'
|
||||||
@@ -90,6 +92,7 @@ OIDC_OP_TOKEN_ENDPOINT = os.getenv('OIDC_OP_TOKEN_ENDPOINT')
|
|||||||
OIDC_OP_USER_ENDPOINT = os.getenv('OIDC_OP_USER_ENDPOINT')
|
OIDC_OP_USER_ENDPOINT = os.getenv('OIDC_OP_USER_ENDPOINT')
|
||||||
LOGIN_REDIRECT_URL = "/"
|
LOGIN_REDIRECT_URL = "/"
|
||||||
LOGOUT_REDIRECT_URL = "/"
|
LOGOUT_REDIRECT_URL = "/"
|
||||||
|
LOGIN_URL = "/"
|
||||||
|
|
||||||
LANGUAGE_CODE = 'en-us'
|
LANGUAGE_CODE = 'en-us'
|
||||||
TIME_ZONE = 'UTC'
|
TIME_ZONE = 'UTC'
|
||||||
|
|||||||
Vendored
+1
File diff suppressed because one or more lines are too long
@@ -0,0 +1,21 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
{% load static %}
|
||||||
|
<script src="{% static 'js/htmx.min.js' %}" defer></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<nav>
|
||||||
|
<ul hx-boost="true">
|
||||||
|
<li><a href="{% url 'vote' %}">Stemmen</a></li>
|
||||||
|
<li><a href="{% url 'nominate' %}">Nomineren</a></li>
|
||||||
|
<li><a href="/">Statistieken</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
<h1>{% block page-name %}Muzak{% endblock %}</h1>
|
||||||
|
</header>
|
||||||
|
<main>
|
||||||
|
{% block main-content %}{% endblock %}
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -1,9 +1,13 @@
|
|||||||
{% if user.is_authenticated %}
|
{% extends "Base.html" %}
|
||||||
|
|
||||||
|
{% block main-content %}
|
||||||
|
{% if user.is_authenticated %}
|
||||||
<p>Current user: {{ user.email }}</p>
|
<p>Current user: {{ user.email }}</p>
|
||||||
<form action="{% url 'oidc_logout' %}" method="post">
|
<form action="{% url 'oidc_logout' %}" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type="submit" value="logout">
|
<input type="submit" value="logout">
|
||||||
</form>
|
</form>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="{% url 'oidc_authentication_init' %}">Login</a>
|
<a href="{% url 'oidc_authentication_init' %}">Login</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
|
{% extends "Base.html" %}
|
||||||
|
|
||||||
|
{% block main-content %}
|
||||||
<h2>Nominate</h2>
|
<h2>Nominate</h2>
|
||||||
<form method="post">
|
<form method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type="text" name="spotify_link" placeholder="Spotify-link">
|
<input type="text" name="spotify_link" placeholder="Spotify-link">
|
||||||
<input type="submit" value="OK">
|
<input type="submit" value="OK">
|
||||||
</form>
|
</form>
|
||||||
|
{% endblock %}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<div id="vote-box" hx-boost="true" hx-target="#vote-box">
|
||||||
|
<iframe src="https://open.spotify.com/embed/track/{{ id }}"
|
||||||
|
class="play-sample" width="300" height="380" frameborder="0" allowtransparency="true"
|
||||||
|
allow="encrypted-media"></iframe>
|
||||||
|
<a href="{% url 'vote-track'%}">Ja</a> | <a href="{% url 'vote-track' %}">Nee</a>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{% extends "Base.html" %}
|
||||||
|
|
||||||
|
{% block main-content %}
|
||||||
|
{% for song in songs %}
|
||||||
|
{{ song }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<div hx-get="{% url 'vote-track' %}" hx-trigger="load">
|
||||||
|
etst
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
+4
-3
@@ -2,8 +2,9 @@ from django.urls import path
|
|||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('track/<str:spotify_id>', views.TrackDetailView.as_view()),
|
path('track/<str:spotify_id>', views.TrackDetailView.as_view(), name="track-detail"),
|
||||||
path('track', views.NominateView.as_view()),
|
path('track/', views.NominateView.as_view(), name="nominate"),
|
||||||
#path('', views.TrackListView.as_view()),
|
path('vote/', views.VoteView.as_view(), name="vote"),
|
||||||
|
path('vote/track', views.VoteTrackView.as_view(), name="vote-track"),
|
||||||
path('', views.AuthView.as_view()),
|
path('', views.AuthView.as_view()),
|
||||||
]
|
]
|
||||||
|
|||||||
+17
-2
@@ -2,7 +2,9 @@ from django.shortcuts import render
|
|||||||
from django.views import View
|
from django.views import View
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.template.response import TemplateResponse
|
from django.template.response import TemplateResponse
|
||||||
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
import re
|
import re
|
||||||
|
from random import choice
|
||||||
from .models import Track, Artist, Album
|
from .models import Track, Artist, Album
|
||||||
from .models.utils import from_json
|
from .models.utils import from_json
|
||||||
from . import spotify
|
from . import spotify
|
||||||
@@ -19,14 +21,27 @@ class TrackListView(View):
|
|||||||
def get(self, request):
|
def get(self, request):
|
||||||
return HttpResponse("..")
|
return HttpResponse("..")
|
||||||
|
|
||||||
class TrackDetailView(View):
|
class TrackDetailView(LoginRequiredMixin, View):
|
||||||
def get(self, request, spotify_id):
|
def get(self, request, spotify_id):
|
||||||
try:
|
try:
|
||||||
track = Track.objects.get(pk=spotify_id)
|
track = Track.objects.get(pk=spotify_id)
|
||||||
return HttpResponse(str(track))
|
return HttpResponse(str(track))
|
||||||
except Track.DoesNotExist:
|
except Track.DoesNotExist:
|
||||||
return HttpResponse("No track")
|
return HttpResponse("No track")
|
||||||
class NominateView(View):
|
|
||||||
|
class VoteView(LoginRequiredMixin, View):
|
||||||
|
def get(self, request):
|
||||||
|
songs = Track.objects.all()
|
||||||
|
return TemplateResponse(request, "Vote.html", {"songs": songs})
|
||||||
|
|
||||||
|
class VoteTrackView(LoginRequiredMixin, View):
|
||||||
|
def get(self, request):
|
||||||
|
pks = Track.objects.values_list('pk', flat=True)
|
||||||
|
track = Track.objects.get(pk=choice(pks))
|
||||||
|
|
||||||
|
return TemplateResponse(request, "SpotifyEmbed.html", {"id": track.id})
|
||||||
|
|
||||||
|
class NominateView(LoginRequiredMixin, View):
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
return TemplateResponse(request, "Nominate.html", {})
|
return TemplateResponse(request, "Nominate.html", {})
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
|
|||||||
@@ -3,3 +3,4 @@ requests
|
|||||||
pillow
|
pillow
|
||||||
python-dotenv
|
python-dotenv
|
||||||
mozilla-django-oidc
|
mozilla-django-oidc
|
||||||
|
django-htmx
|
||||||
|
|||||||
Reference in New Issue
Block a user