mirror of
https://gitlab.science.ru.nl/technicie/MarietjeDjango.git
synced 2025-12-10 10:22:20 +01:00
Marietje 4.1: Addition of Django REST framework, Swagger, Dark mode and updates to Django and Bootstrap
This commit is contained in:
@ -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")
|
||||
|
||||
Reference in New Issue
Block a user