Voting update

Nu met 100% meer mogelijkheid tot stemmen. Top.
This commit is contained in:
2024-02-07 00:04:01 +01:00
parent d1aabd53dc
commit 0f5090cadc
10 changed files with 82 additions and 14 deletions
+3
View File
@@ -24,6 +24,7 @@ INSTALLED_APPS = [
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_htmx',
]
MIDDLEWARE = [
@@ -34,6 +35,7 @@ MIDDLEWARE = [
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django_htmx.middleware.HtmxMiddleware',
]
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')
LOGIN_REDIRECT_URL = "/"
LOGOUT_REDIRECT_URL = "/"
LOGIN_URL = "/"
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
File diff suppressed because one or more lines are too long
+21
View File
@@ -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>
+4
View File
@@ -1,3 +1,6 @@
{% extends "Base.html" %}
{% block main-content %}
{% if user.is_authenticated %}
<p>Current user: {{ user.email }}</p>
<form action="{% url 'oidc_logout' %}" method="post">
@@ -7,3 +10,4 @@
{% else %}
<a href="{% url 'oidc_authentication_init' %}">Login</a>
{% endif %}
{% endblock %}
+4
View File
@@ -1,6 +1,10 @@
{% extends "Base.html" %}
{% block main-content %}
<h2>Nominate</h2>
<form method="post">
{% csrf_token %}
<input type="text" name="spotify_link" placeholder="Spotify-link">
<input type="submit" value="OK">
</form>
{% endblock %}
+6
View File
@@ -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>
+12
View File
@@ -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
View File
@@ -2,8 +2,9 @@ from django.urls import path
from . import views
urlpatterns = [
path('track/<str:spotify_id>', views.TrackDetailView.as_view()),
path('track', views.NominateView.as_view()),
#path('', views.TrackListView.as_view()),
path('track/<str:spotify_id>', views.TrackDetailView.as_view(), name="track-detail"),
path('track/', views.NominateView.as_view(), name="nominate"),
path('vote/', views.VoteView.as_view(), name="vote"),
path('vote/track', views.VoteTrackView.as_view(), name="vote-track"),
path('', views.AuthView.as_view()),
]
+17 -2
View File
@@ -2,7 +2,9 @@ from django.shortcuts import render
from django.views import View
from django.http import HttpResponse
from django.template.response import TemplateResponse
from django.contrib.auth.mixins import LoginRequiredMixin
import re
from random import choice
from .models import Track, Artist, Album
from .models.utils import from_json
from . import spotify
@@ -19,14 +21,27 @@ class TrackListView(View):
def get(self, request):
return HttpResponse("..")
class TrackDetailView(View):
class TrackDetailView(LoginRequiredMixin, View):
def get(self, request, spotify_id):
try:
track = Track.objects.get(pk=spotify_id)
return HttpResponse(str(track))
except Track.DoesNotExist:
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):
return TemplateResponse(request, "Nominate.html", {})
def post(self, request):
+1
View File
@@ -3,3 +3,4 @@ requests
pillow
python-dotenv
mozilla-django-oidc
django-htmx