Compare commits

...

2 commits

5 changed files with 32 additions and 23 deletions

View file

@ -54,7 +54,7 @@ SESSION_EXPIRE_AT_BROWSER_CLOSE = True
DOBA_ODHLASENI_PRI_ZASKRTNUTI_NEODHLASOVAT = 365 * 24 * 3600 # rok
# View pro chybu s CSRF tokenem (např. se sušenkami)
CSRF_FAILURE_VIEW = 'various.views.csrf_error'
CSRF_FAILURE_VIEW = 'various.views.csrf.csrf_error'
# Modules configuration

View file

@ -5,7 +5,7 @@ from django.contrib.staticfiles.finders import find
import csv
import various.views
import various.views.generic
from seminar.views import obalkyView
from .models import Soustredeni, Soustredeni_Ucastnici
@ -38,7 +38,10 @@ class KonkretniSoustredeniMixin:
self.soustredeni = get_object_or_404(Soustredeni, id=soustredeni_id)
class SoustredeniUcastniciBaseView(KonkretniSoustredeniMixin, various.views.NeprazdnyListView):
class SoustredeniUcastniciBaseView(
KonkretniSoustredeniMixin,
various.views.generic.NeprazdnyListView,
):
"""
Slouží jako ListView účastníků soustředění
+ háže inteligentní chybu při soustředění bez účastníků
@ -82,7 +85,10 @@ class SoustredeniUcastniciExportView(SoustredeniUcastniciBaseView):
return response
class SoustredeniStvrzenkyView(various.views.TeXResponseMixin, SoustredeniUcastniciBaseView):
class SoustredeniStvrzenkyView(
various.views.generic.TeXResponseMixin,
SoustredeniUcastniciBaseView,
):
template_name = 'soustredeni/stvrzenky.tex'
dalsi_potrebne_soubory = [find('images/logomm.pdf')]

View file

11
various/views/csrf.py Normal file
View file

@ -0,0 +1,11 @@
from django.http import HttpResponseForbidden
from django.shortcuts import render
def csrf_error(request, reason=""):
""" Jednoduchý „template view“ (třída to být nemůže) pro CSRF chyby """
return render(
request, 'various/403_csrf.html',
{"url": request.META.get("HTTP_REFERER", None), "reason": reason},
status=HttpResponseForbidden.status_code,
)

View file

@ -1,23 +1,19 @@
"""
Stejně jako je `django.views.generic` jsou zde generické Views
a pár mixinů, které upravují chování Views.
"""
import http
import tempfile
import shutil
import subprocess
import tempfile
from pathlib import Path
from django.http import HttpResponseForbidden, HttpResponse
from django.http import HttpResponse
from django.shortcuts import render
from django.views import generic
from django.template.loader import render_to_string
def csrf_error(request, reason=""):
""" Jednoduchý „template view“ (třída to být nemůže) pro CSRF chyby """
return render(
request, 'various/403_csrf.html',
{"url": request.META.get("HTTP_REFERER", None), "reason": reason},
status=HttpResponseForbidden.status_code,
)
from django.views import generic
class NeprazdnyListView(generic.ListView):
@ -43,11 +39,9 @@ class NeprazdnyListView(generic.ListView):
is_empty = not self.object_list
if is_empty:
return render(request, 'universal.html', {
'title': self.if_prazdny_title,
'text': self.if_prazdny_text,
},
status=http.HTTPStatus.NOT_FOUND,
)
'title': self.if_prazdny_title,
'text': self.if_prazdny_text,
}, status=http.HTTPStatus.NOT_FOUND)
return self.render(request, *args, **kwargs)
@ -81,5 +75,3 @@ class TeXResponseMixin:
with open(tempdir / "main.pdf", "rb") as pdffile:
response = HttpResponse(pdffile.read(), content_type='application/pdf', **response_kwargs)
return response