Marietje 4.1: Addition of Django REST framework, Swagger, Dark mode and updates to Django and Bootstrap

This commit is contained in:
Lars van Rhijn
2023-09-14 19:55:51 +02:00
parent 379ababcc0
commit d1a1be7e2e
124 changed files with 4835 additions and 3490 deletions

View File

@ -1,28 +1,89 @@
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from .counters import upload_counter
from .models import Song
from django.views.generic import TemplateView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib import messages
from .services import check_upload_stats, get_reputation, upload_file, UploadException
@login_required
def upload(request):
return render(request, 'songs/upload.html')
class UploadView(LoginRequiredMixin, TemplateView):
template_name = "songs/upload.html"
def post(self, request, **kwargs):
files = request.FILES.getlist("file[]")
artists = request.POST.getlist("artist[]")
titles = request.POST.getlist("title[]")
for artist in artists:
if not artist:
messages.add_message(
request, messages.ERROR, "Please enter artists which are not empty.", extra_tags="danger"
)
return render(request, self.template_name)
for title in titles:
if not title:
messages.add_message(
request, messages.ERROR, "Please enter titles which are not empty.", extra_tags="danger"
)
return render(request, self.template_name)
if not check_upload_stats(request.user):
reputation = get_reputation(request.user)
msg = (
"Queue-to-upload ratio too low. Please queue more during regular opening hours to improve the "
"ratio. (Ratio: {} ≱ 1.00)"
)
messages.add_message(request, messages.ERROR, msg.format(reputation), extra_tags="danger")
return render(request, self.template_name)
uploaded_correctly = 0
for i, file in enumerate(files):
try:
upload_file(file, artists[i], titles[i], request.user)
uploaded_correctly += 1
except UploadException:
messages.add_message(
request,
messages.ERROR,
"File {} could not be uploaded due to an exception that "
"occurred while contacting the file server, please try "
"again.".format(titles[i]),
extra_tags="danger",
)
if uploaded_correctly > 0:
messages.add_message(
request,
messages.SUCCESS,
"{}/{} files uploaded.".format(uploaded_correctly, len(files)),
extra_tags="success",
)
upload_counter.inc()
return render(request, self.template_name)
@login_required
def manage(request):
return render(request, 'songs/manage.html')
class ManageView(LoginRequiredMixin, TemplateView):
template_name = "songs/manage.html"
@login_required
def edit(request, song_id):
song = get_object_or_404(Song, pk=song_id, user=request.user)
if not request.POST:
return render(request, 'songs/edit.html', {'song': song})
class EditView(LoginRequiredMixin, TemplateView):
template_name = "songs/edit.html"
# Save data.
artist = request.POST.get('artist')
title = request.POST.get('title')
song.artist = artist
song.title = title
song.save()
return redirect('songs:manage')
def get(self, request, **kwargs):
song_id = kwargs.get("song_id")
song = get_object_or_404(Song, pk=song_id, user=request.user)
return render(request, self.template_name, {"song": song})
def post(self, request, **kwargs):
song_id = kwargs.get("song_id")
song = get_object_or_404(Song, pk=song_id, user=request.user)
artist = request.POST.get("artist")
title = request.POST.get("title")
song.artist = artist
song.title = title
song.save()
return redirect("songs:manage")