From: Guillaume Pellerin Date: Tue, 29 Jun 2021 06:58:19 +0000 (+0200) Subject: store user periods into session, optimize context, X-Git-Tag: 2.1~11 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=5a73887d30bf012eb40fc3bd52ca7526e842177d;p=teleforma.git store user periods into session, optimize context, --- diff --git a/app/settings.py b/app/settings.py index 60cf799d..9d2f06d9 100644 --- a/app/settings.py +++ b/app/settings.py @@ -233,7 +233,6 @@ TELEMETA_DEFAULT_GRAPHER_ID = 'waveform_contour_wh' AUTH_PROFILE_MODULE = 'telemeta.userprofile' LOGIN_URL = '/login/' LOGIN_REDIRECT_URL = reverse_lazy('teleforma-desk') -SESSION_EXPIRE_AT_BROWSER_CLOSE = False EMAIL_HOST = 'angus.parisson.com' DEFAULT_FROM_EMAIL = 'crfpa@pre-barreau.com' diff --git a/app/wsgi.ini b/app/wsgi.ini index 46cdf39a..c7033697 100644 --- a/app/wsgi.ini +++ b/app/wsgi.ini @@ -1,6 +1,6 @@ [uwsgi] -socket = 0.0.0.0:8000 +socket = :8000 chdir = /srv/app/ module = wsgi touch-reload = /srv/app/wsgi.py diff --git a/teleforma/context_processors.py b/teleforma/context_processors.py index 9d805982..eb88e565 100644 --- a/teleforma/context_processors.py +++ b/teleforma/context_processors.py @@ -34,15 +34,19 @@ from teleforma.views.core import get_periods +from teleforma.models.core import Period def periods(request): """return the periods assigned to the user """ - - user = request.user - - if not user.is_authenticated: + if not request.user.is_authenticated: return {'periods': None} else: - return {'periods': get_periods(user)} + period_ids = request.session.get('periods') + if not periods: + periods = get_periods(request.user) + request.session['periods'] = [period.id for period in periods] + else: + periods = [Period.objects.get(id=period_id) for period_id in period_ids] + return {'periods': periods} diff --git a/teleforma/views/core.py b/teleforma/views/core.py index d5b274d0..37c28d77 100644 --- a/teleforma/views/core.py +++ b/teleforma/views/core.py @@ -46,6 +46,7 @@ from django.contrib.contenttypes.models import ContentType from django.http import Http404, HttpResponse, HttpResponseRedirect from django.http.response import StreamingHttpResponse from django.shortcuts import redirect +from django.shortcuts import get_object_or_404 from django.contrib.sites.shortcuts import get_current_site from django.template import loader from django.urls import reverse @@ -259,15 +260,14 @@ class HomeRedirectView(View): def get(self, request): if request.user.is_authenticated: - periods = get_periods(request.user) - if periods: + period_id = request.session.get('period') + if not period_id: + periods = request.session.get('periods') + if not periods: + periods = get_periods(request.user) period = get_default_period(periods) - if period in periods: - return HttpResponseRedirect(reverse('teleforma-desk-period-list', kwargs={'period_id': period.id})) - else: - return HttpResponseRedirect(reverse('teleforma-desk-period-list', kwargs={'period_id': periods[0].id})) - else: - return HttpResponseRedirect(reverse('teleforma-login')) + period_id = period.id + return HttpResponseRedirect(reverse('teleforma-desk-period-list', kwargs={'period_id': period_id})) else: return HttpResponseRedirect(reverse('teleforma-login')) @@ -277,18 +277,17 @@ class PeriodAccessMixin(View): def get_context_data(self, **kwargs): context = super(PeriodAccessMixin, self).get_context_data(**kwargs) if 'period_id' in self.kwargs.keys(): - period = Period.objects.filter(id=int(self.kwargs['period_id'])) - if period: - self.period = period[0] - else: - periods = get_periods(self.request.user) - self.period = get_default_period(periods) + self.period = Period.objects.get_object_or_404(id=int(self.kwargs['period_id'])) + if self.period in context['periods']: + self.request.session['period'] = self.period.id + else: + self.period = get_default_period(context['periods']) context['period'] = self.period return context def render_to_response(self, context): period = context['period'] - if not period in get_periods(self.request.user): + if not period in context['periods']: messages.warning(self.request, _( "You do NOT have access to this resource and then have been redirected to your desk.")) return redirect('teleforma-home')