Как на странице отобразить данные, введённые на другой странице без использования сессий?
У меня есть основная страница, на которой пользователь выбирает дату и получает 3 ссылки на другие страницы. На 3х других страницах отображается информация в зависимости от даты.
Сейчас код выглядит примерно так:
class MainPageView(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs):
form = MainForm(request.user, request.GET)
if request.GET.get('submitted') and form.is_valid():
request.session['date'] = form.cleaned_data['date']
context = {'form': form}
return render(request, "main.html", context)
class Page1View(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs):
context ={'date': request.session['date']}
return render(request, "page1.html", context)
Есть ли способ сделать что-то подобное без использования сессий?
Ответы (2 шт):
Возможно, залить данные в Датабазу. А потом вылить их на второй сайт.
Кажется хранить в сессии только дату избыточно, попробуйте формировать url адрес страниц, вида /page/2021-12-28, тоесть urls.py, будет выглядеть примерно вот так
from django.urls import path
from some_app.views import Page1View
urlpatterns = [
path(r'^page/(?P<some_date>\d{4}-\d{2}-\d{2})/$', Page1View.as_view(), name='my_date'),
]
views.py
class Page1View(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs):
context ={'date': request.GET.get('some_date')}
return render(request, "page1.html", context)
То есть основная идея, сформировать url, в котором записана некая дата, а затем её перехватывать в необходимой вьюхи, таким способом мы не используем сессии и подавно не записываем ненужную информации в БД. Учтите, что я привел пример кода, который вероятно у вас не заработает, также вероятно, что перехваченную дату вам придётся сконвертировать.
Небольшой upd, приведу работающий пример передачи даты в view, в самой view также приводим конвертацию в объект date, что бы дальше было проще работать, с перехваченной датой.
Так выглядит urls.py
from django.urls import path, re_path
from app.views import Page1View
urlpatterns = [
re_path(r'^page/(?P<some_date>\d{4}-\d{2}-\d{2})/$', Page1View.as_view(), name='my_date')
]
views.py
from datetime import datetime
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views import View
class Page1View(View):
def get(self, request, *args, **kwargs):
context ={'date': datetime.strptime(self.kwargs.get('some_date'), '%Y-%m-%d').date()}
return render(request, "page1.html", context)