From 9c68eac050bb8e4320415fcf82fb780c0d4d7cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Thu, 10 Aug 2023 13:46:15 +0200 Subject: [PATCH] =?UTF-8?q?P=C5=99esunut=C3=AD=20"switche=20view=20podle?= =?UTF-8?q?=20GET/POST"=20ze=20seminar.utils=20do=20various.utils?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/urls.py | 2 +- seminar/utils.py | 28 ---------------------------- various/utils.py | 29 +++++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/odevzdavatko/urls.py b/odevzdavatko/urls.py index d1ac91fa..57b770a8 100644 --- a/odevzdavatko/urls.py +++ b/odevzdavatko/urls.py @@ -2,7 +2,7 @@ from django.urls import path from personalni.utils import org_required, resitel_required, \ resitel_or_org_required -from seminar.utils import viewMethodSwitch +from various.utils import viewMethodSwitch from . import views urlpatterns = [ diff --git a/seminar/utils.py b/seminar/utils.py index 73705a95..b06550d1 100644 --- a/seminar/utils.py +++ b/seminar/utils.py @@ -1,6 +1,5 @@ import datetime -from django import views as DjangoViews from django.contrib.contenttypes.models import ContentType @@ -98,30 +97,3 @@ def seznam_problemu(): node = t.get_parent(node) return problemy - - -def viewMethodSwitch(get, post): - """ - Vrátí view, který zavolá různé jiné views podle toho, kterou metodou je zavolán. - - Inspirováno https://docs.djangoproject.com/en/3.1/topics/class-based-views/mixins/#an-alternative-better-solution, jen jsem to udělal genericky. - - Parametry: - post view pro metodu POST - get view pro metodu GET - - V obou případech se míní už view jakožto funkce, takže u class-based views se už má použít .as_view() - - TODO: Podpora i pro metodu HEAD? A možná i pro FILES? - """ - - theGetView = get - thePostView = post - - class NewView(DjangoViews.View): - def get(self, request, *args, **kwargs): - return theGetView(request, *args, **kwargs) - def post(self, request, *args, **kwargs): - return thePostView(request, *args, **kwargs) - - return NewView.as_view() diff --git a/various/utils.py b/various/utils.py index 93a0239e..de483cb2 100644 --- a/various/utils.py +++ b/various/utils.py @@ -1,3 +1,5 @@ +from django import views as DjangoViews + bez_diakritiky = ({} # FIXME: funguje jen pro český a slovenský text, jinak jsou špatně # transliterace. Potenciální řešení: @@ -52,3 +54,30 @@ def from_roman(rom): if rom.upper().startswith(n): return i + from_roman(rom[len(n):]) raise Exception('Invalid roman numeral: "%s"', rom) + + +def viewMethodSwitch(get, post): + """ + Vrátí view, který zavolá různé jiné views podle toho, kterou metodou je zavolán. + + Inspirováno https://docs.djangoproject.com/en/3.1/topics/class-based-views/mixins/#an-alternative-better-solution, jen jsem to udělal genericky. + + Parametry: + post view pro metodu POST + get view pro metodu GET + + V obou případech se míní už view jakožto funkce, takže u class-based views se už má použít .as_view() + + TODO: Podpora i pro metodu HEAD? A možná i pro FILES? + """ + + theGetView = get + thePostView = post + + class NewView(DjangoViews.View): + def get(self, request, *args, **kwargs): + return theGetView(request, *args, **kwargs) + def post(self, request, *args, **kwargs): + return thePostView(request, *args, **kwargs) + + return NewView.as_view()